Application Profiles. Settings menu.
This commit is contained in:
parent
25656e83a8
commit
306b304b95
14 changed files with 1519 additions and 954 deletions
File diff suppressed because it is too large
Load diff
6
OsmAnd/res/drawable/fab_extended_blue_idle.xml
Normal file
6
OsmAnd/res/drawable/fab_extended_blue_idle.xml
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners android:radius="24dp" />
|
||||
<solid android:color="@color/map_widget_blue"/>
|
||||
</shape>
|
6
OsmAnd/res/drawable/fab_extended_blue_pressed.xml
Normal file
6
OsmAnd/res/drawable/fab_extended_blue_pressed.xml
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners android:radius="24dp" />
|
||||
<solid android:color="@color/map_widget_blue_pressed"/>
|
||||
</shape>
|
5
OsmAnd/res/drawable/fab_extended_drawable.xml
Normal file
5
OsmAnd/res/drawable/fab_extended_drawable.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/fab_extended_blue_pressed" android:state_pressed="true"/>
|
||||
<item android:drawable="@drawable/fab_extended_blue_idle"/>
|
||||
</selector>
|
9
OsmAnd/res/layout/activity_profile_settings.xml
Normal file
9
OsmAnd/res/layout/activity_profile_settings.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
|
||||
</LinearLayout>
|
84
OsmAnd/res/layout/profile_list_item.xml
Normal file
84
OsmAnd/res/layout/profile_list_item.xml
Normal file
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/setting_profile_item_height"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/profile_icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
android:layout_marginLeft="@dimen/setting_profile_image_margin"
|
||||
android:layout_marginRight="@dimen/setting_profile_image_margin"
|
||||
android:src="@drawable/ic_action_bicycle_dark"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<include layout="@layout/divider"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:layout_weight="4">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profile_title"
|
||||
android:textStyle="bold"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/main_font_dark"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="Bicycle"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/profile_descr"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
tools:text="Type: Bicycle"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="2"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/profile_settings"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_action_additional_option"
|
||||
android:tint="?attr/primary_icon_color"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:padding="@dimen/setting_profile_item_switch_margin"/>
|
||||
|
||||
<android.support.v7.widget.SwitchCompat
|
||||
android:id="@+id/profile_switch"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical|end"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
45
OsmAnd/res/layout/profiles_list_fragment.xml
Normal file
45
OsmAnd/res/layout/profiles_list_fragment.xml
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/ctx_menu_info_view_bg"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/top_divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/appbar"
|
||||
android:orientation="vertical">
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="4dp"/>
|
||||
|
||||
<include layout="@layout/card_top_divider"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/profiles_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/top_divider"
|
||||
android:clipToPadding="false"/>
|
||||
|
||||
<android.support.v7.widget.AppCompatButton
|
||||
android:id="@+id/add_profile_btn"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_gravity="bottom|center_horizontal"
|
||||
android:background="@drawable/fab_extended_drawable"
|
||||
android:drawableLeft="@drawable/ic_action_plus"
|
||||
android:drawableStart="@drawable/ic_action_plus"
|
||||
android:text="@string/shared_string_add"
|
||||
android:layout_margin="16dp"
|
||||
android:textColor="@color/color_white"/>
|
||||
|
||||
</RelativeLayout>
|
|
@ -327,4 +327,9 @@
|
|||
|
||||
<dimen name="text_button_letter_spacing" format="float">0.01</dimen>
|
||||
<dimen name="text_button_line_spacing_multiplier" format="float">1.2</dimen>
|
||||
|
||||
<dimen name="setting_profile_item_height">64dp</dimen>
|
||||
<dimen name="setting_profile_image_margin">20dp</dimen>
|
||||
<dimen name="setting_profile_item_switch_margin">18dp</dimen>
|
||||
|
||||
</resources>
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<resources>
|
||||
<!--
|
||||
<!--
|
||||
README:
|
||||
- The preferred way to help with translations is via https://hosted.weblate.org/engage/osmand/
|
||||
- If you edit a strings.xml file directly, please make sure:
|
||||
|
@ -10,7 +10,9 @@
|
|||
- For wording and consistency, please note https://osmand.net/help-online?id=technical-articles#Creating_a_Consistent_User_Experience
|
||||
Thx - Hardy
|
||||
|
||||
-->
|
||||
-->
|
||||
<string name="application_profiles_descr">Select the profiles to be visible in the app.</string>
|
||||
<string name="application_profiles">Application profiles</string>
|
||||
<string name="shared_string_degrees">Degrees</string>
|
||||
<string name="shared_string_milliradians">Milliradians</string>
|
||||
<string name="angular_measeurement">Angular measurement units</string>
|
||||
|
@ -326,11 +328,11 @@
|
|||
<string name="av_locations_selected_desc">GPX file with coordinates and data of the selected notes.</string>
|
||||
<string name="av_locations_all_desc">GPX file with coordinates and data of all notes.</string>
|
||||
<!-- string name="release_3_0">
|
||||
• New: Support for global offline travel guides. Referenced locations are linked to the map. Initial data from Wikivoyage.\n\n
|
||||
• Wikipedia: New look, active links, images now supported\n\n
|
||||
• Open Track UI: Support for waypoint groups\n\n
|
||||
• Map markers: Import of selected groups from GPX files, coordinate input, new look\n\n
|
||||
• OsmAnd Live subscription now supports all OsmAnd features\n\n
|
||||
• New: Support for global offline travel guides. Referenced locations are linked to the map. Initial data from Wikivoyage.\n\n
|
||||
• Wikipedia: New look, active links, images now supported\n\n
|
||||
• Open Track UI: Support for waypoint groups\n\n
|
||||
• Map markers: Import of selected groups from GPX files, coordinate input, new look\n\n
|
||||
• OsmAnd Live subscription now supports all OsmAnd features\n\n
|
||||
</string -->
|
||||
<string name="modify_the_search_query">Modify the search query.</string>
|
||||
<string name="shared_string_actions">Actions</string>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<Preference android:key="general_settings" android:title="@string/general_settings_2" android:summary="@string/general_settings_descr"/>
|
||||
<Preference android:key="application_profiles" android:title="@string/application_profiles" android:summary="@string/application_profiles_descr"/>
|
||||
<Preference android:key="routing_settings" android:title="@string/routing_settings_2" android:summary="@string/routing_settings_descr"/>
|
||||
<Preference android:key="subscription_settings" android:title="@string/osm_live_subscription" android:summary="@string/osm_live_subscription_desc"/>
|
||||
<PreferenceCategory android:key="plugin_settings" android:title="@string/plugin_settings" />
|
||||
|
|
|
@ -14,6 +14,7 @@ import net.osmand.plus.OsmandPlugin;
|
|||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.liveupdates.OsmLiveActivity;
|
||||
import net.osmand.plus.profiles.SettingsProfileActivity;
|
||||
|
||||
public class SettingsActivity extends SettingsBaseActivity {
|
||||
|
||||
|
@ -28,6 +29,7 @@ public class SettingsActivity extends SettingsBaseActivity {
|
|||
private Preference general;
|
||||
private Preference routing;
|
||||
private Preference subscription;
|
||||
private Preference profiles;
|
||||
|
||||
|
||||
@Override
|
||||
|
@ -40,6 +42,8 @@ public class SettingsActivity extends SettingsBaseActivity {
|
|||
general.setOnPreferenceClickListener(this);
|
||||
routing = (Preference) screen.findPreference("routing_settings");
|
||||
routing.setOnPreferenceClickListener(this);
|
||||
profiles = (Preference) screen.findPreference("application_profiles");
|
||||
profiles.setOnPreferenceClickListener(this);
|
||||
subscription = (Preference) screen.findPreference("subscription_settings");
|
||||
subscription.setOnPreferenceClickListener(this);
|
||||
|
||||
|
@ -88,6 +92,9 @@ public class SettingsActivity extends SettingsBaseActivity {
|
|||
if (preference == general) {
|
||||
startActivity(new Intent(this, SettingsGeneralActivity.class));
|
||||
return true;
|
||||
} else if (preference == profiles){
|
||||
startActivity(new Intent(this, SettingsProfileActivity.class));
|
||||
return true;
|
||||
} else if (preference == routing) {
|
||||
startActivity(new Intent(this, SettingsNavigationActivity.class));
|
||||
return true;
|
||||
|
|
87
OsmAnd/src/net/osmand/plus/profiles/ProfileMenuAdapter.java
Normal file
87
OsmAnd/src/net/osmand/plus/profiles/ProfileMenuAdapter.java
Normal file
|
@ -0,0 +1,87 @@
|
|||
package net.osmand.plus.profiles;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.SwitchCompat;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import java.util.List;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.profiles.ProfileMenuAdapter.ProfileViewHolder;
|
||||
import net.osmand.plus.profiles.SettingsProfileActivity.ProfileItem;
|
||||
|
||||
public class ProfileMenuAdapter extends RecyclerView.Adapter<ProfileViewHolder> {
|
||||
|
||||
private List<ProfileItem> items;
|
||||
OsmandApplication app;
|
||||
|
||||
public ProfileMenuAdapter(List<ProfileItem> items, OsmandApplication app) {
|
||||
this.items = items;
|
||||
this.app = app;
|
||||
}
|
||||
|
||||
public List<ProfileItem> getItems() {
|
||||
return items;
|
||||
}
|
||||
|
||||
public void addItem(ProfileItem profileItem) {
|
||||
items.add(profileItem);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ProfileViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View itemView = LayoutInflater.from(parent.getContext())
|
||||
.inflate(R.layout.profile_list_item, parent, false);
|
||||
return new ProfileViewHolder(itemView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ProfileViewHolder holder, int position) {
|
||||
ProfileItem item = items.get(position);
|
||||
holder.title.setText(item.getTitle());
|
||||
holder.descr.setText(item.getDescr());
|
||||
Drawable drawable = app.getUIUtilities().getThemedIcon(item.getIconRes());
|
||||
holder.icon.setImageDrawable(drawable);
|
||||
holder.aSwitch.setChecked(item.getState());
|
||||
holder.aSwitch.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
//todo change profile state;
|
||||
}
|
||||
});
|
||||
holder.profileOptions.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
//todo open profile settings;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return items.size();
|
||||
}
|
||||
|
||||
class ProfileViewHolder extends RecyclerView.ViewHolder {
|
||||
TextView title, descr;
|
||||
SwitchCompat aSwitch;
|
||||
ImageView icon, profileOptions;
|
||||
|
||||
ProfileViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
title = itemView.findViewById(R.id.profile_title);
|
||||
descr = itemView.findViewById(R.id.profile_descr);
|
||||
aSwitch = itemView.findViewById(R.id.profile_switch);
|
||||
icon = itemView.findViewById(R.id.profile_icon);
|
||||
profileOptions = itemView.findViewById(R.id.profile_settings);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
package net.osmand.plus.profiles;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.OsmandActionBarActivity;
|
||||
|
||||
public class SettingsProfileActivity extends OsmandActionBarActivity {
|
||||
|
||||
private OsmandApplication app;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
app = getMyApplication();
|
||||
app.applyTheme(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.single_fragment_layout);
|
||||
if (savedInstanceState == null) {
|
||||
SettingsProfileFragment profileFragment = new SettingsProfileFragment();
|
||||
profileFragment.setArguments(getIntent().getExtras());
|
||||
getSupportFragmentManager().beginTransaction().add(android.R.id.content, profileFragment).commit();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int itemId = item.getItemId();
|
||||
switch (itemId) {
|
||||
case android.R.id.home:
|
||||
finish();
|
||||
return true;
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
public class ProfileItem {
|
||||
private int iconRes;
|
||||
private String title;
|
||||
private String descr;
|
||||
private boolean state;
|
||||
|
||||
public ProfileItem(int iconRes, String title, String descr, boolean state) {
|
||||
this.iconRes = iconRes;
|
||||
this.title = title;
|
||||
this.descr = descr;
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public int getIconRes() {
|
||||
return iconRes;
|
||||
}
|
||||
|
||||
public void setIconRes(int iconRes) {
|
||||
this.iconRes = iconRes;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getDescr() {
|
||||
return descr;
|
||||
}
|
||||
|
||||
public void setDescr(String descr) {
|
||||
this.descr = descr;
|
||||
}
|
||||
|
||||
public boolean getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public void setState(boolean state) {
|
||||
this.state = state;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package net.osmand.plus.profiles;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.AppCompatButton;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.BaseOsmAndFragment;
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
public class SettingsProfileFragment extends BaseOsmAndFragment {
|
||||
|
||||
private static final Log LOG = PlatformUtil.getLog(SettingsProfileFragment.class);
|
||||
|
||||
private ProfileMenuAdapter adapter;
|
||||
private RecyclerView recyclerView;
|
||||
private AppCompatButton btn;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
|
||||
@Nullable Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.profiles_list_fragment, container, false);
|
||||
|
||||
recyclerView = view.findViewById(R.id.profiles_list);
|
||||
btn = view.findViewById(R.id.add_profile_btn);
|
||||
btn.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
//todo add new profile;
|
||||
}
|
||||
});
|
||||
|
||||
return view;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue