Skip to content

Commit f820045

Browse files
committed
display userinfo
1 parent 1724433 commit f820045

15 files changed

+521
-117
lines changed

runner/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,9 @@ dependencies {
218218
// MaterialEditText, see: https://github.com/rengwuxian/MaterialEditText
219219
compile 'com.rengwuxian.materialedittext:library:2.1.4'
220220

221+
// Glide, see: https://github.com/bumptech/glide
222+
compile 'com.github.bumptech.glide:glide:3.7.0'
223+
221224
// You need to build grpc-java to obtain these libraries below.
222225
compile 'io.grpc:grpc-okhttp:1.2.0'
223226
compile 'io.grpc:grpc-protobuf-lite:1.2.0'

runner/proguard-rules.pro

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,13 @@
156156
-keep class okio.** { *; }
157157
-dontwarn okio.**
158158

159-
-keep public class * extends com.google.protobuf.** { *; }
159+
-keep public class * extends com.google.protobuf.** { *; }
160+
161+
-keep public class * implements com.bumptech.glide.module.GlideModule
162+
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
163+
**[] $VALUES;
164+
public *;
165+
}
166+
167+
# for DexGuard only
168+
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule

runner/src/main/AndroidManifest.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@
8888
android:name=".ui.about.AboutActivity"
8989
android:screenOrientation="portrait"/>
9090

91+
<activity
92+
android:name=".ui.home.userinfo.UserInfoActivity"
93+
android:screenOrientation="portrait"/>
94+
9195
<activity
9296
android:name=".ui.VideoPlayActivity"
9397
android:configChanges="orientation|keyboardHidden|screenSize"

runner/src/main/java/site/hanschen/runwithyou/ui/home/HomeActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ public void onTabSelected(@IdRes int tabId) {
7979
}
8080

8181
mPreSelectedTab = tabId;
82+
83+
if (tabId == R.id.setting) {
84+
getSupportActionBar().hide();
85+
} else {
86+
getSupportActionBar().show();
87+
}
8288
}
8389
}
8490
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package site.hanschen.runwithyou.ui.home.setting;
2+
3+
import dagger.Component;
4+
import site.hanschen.runwithyou.application.ApplicationComponent;
5+
import site.hanschen.runwithyou.dagger.FragmentScoped;
6+
7+
/**
8+
* @author HansChen
9+
*/
10+
@FragmentScoped
11+
@Component(dependencies = ApplicationComponent.class, modules = PreferenceModule.class)
12+
interface PreferenceComponent {
13+
14+
void inject(SettingPreferenceFragment fragment);
15+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package site.hanschen.runwithyou.ui.home.setting;
2+
3+
import dagger.Module;
4+
5+
/**
6+
* @author HansChen
7+
*/
8+
@Module
9+
class PreferenceModule {
10+
11+
}
Lines changed: 26 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,144 +1,55 @@
11
package site.hanschen.runwithyou.ui.home.setting;
22

3-
import android.content.Context;
43
import android.content.Intent;
5-
import android.content.SharedPreferences;
6-
import android.net.Uri;
7-
import android.os.Build;
84
import android.os.Bundle;
9-
import android.os.PowerManager;
10-
import android.preference.Preference;
11-
import android.preference.PreferenceFragment;
12-
import android.preference.PreferenceGroup;
13-
import android.preference.PreferenceScreen;
14-
import android.provider.Settings;
5+
import android.support.annotation.Nullable;
6+
import android.view.LayoutInflater;
7+
import android.view.View;
8+
import android.view.ViewGroup;
9+
import android.widget.FrameLayout;
10+
import android.widget.ImageView;
11+
import android.widget.TextView;
1512

16-
import java.util.Locale;
17-
18-
import javax.inject.Inject;
19-
20-
import io.reactivex.Observable;
21-
import io.reactivex.ObservableEmitter;
22-
import io.reactivex.ObservableOnSubscribe;
23-
import io.reactivex.android.schedulers.AndroidSchedulers;
24-
import io.reactivex.functions.Consumer;
25-
import io.reactivex.schedulers.Schedulers;
2613
import site.hanschen.runwithyou.R;
27-
import site.hanschen.runwithyou.application.RunnerApplication;
28-
import site.hanschen.runwithyou.database.repository.SettingRepository;
29-
import site.hanschen.runwithyou.ui.WebViewActivity;
30-
import site.hanschen.runwithyou.ui.about.AboutActivity;
31-
14+
import site.hanschen.runwithyou.base.RunnerBaseFragment;
15+
import site.hanschen.runwithyou.ui.home.userinfo.UserInfoActivity;
3216

3317
/**
3418
* @author HansChen
3519
*/
36-
public class SettingFragment extends PreferenceFragment {
20+
public class SettingFragment extends RunnerBaseFragment {
3721

38-
@Inject
39-
SettingRepository mSettingRepository;
40-
@Inject
41-
SharedPreferences mPreferences;
22+
private FrameLayout mUserLayout;
23+
private TextView mUsername;
24+
private ImageView mUserIcon;
4225

4326
@Override
44-
public void onCreate(Bundle savedInstanceState) {
27+
public void onCreate(@Nullable Bundle savedInstanceState) {
4528
super.onCreate(savedInstanceState);
46-
DaggerSettingComponent.builder()
47-
.applicationComponent(RunnerApplication.getInstance().getAppComponent())
48-
.build()
49-
.inject(SettingFragment.this);
50-
addPreferencesFromResource(R.xml.setting_preferences);
51-
mPreferences.registerOnSharedPreferenceChangeListener(mOnPreferenceChangeListener);
5229
}
5330

5431
@Override
5532
public void onDestroy() {
5633
super.onDestroy();
57-
mPreferences.unregisterOnSharedPreferenceChangeListener(mOnPreferenceChangeListener);
5834
}
5935

36+
@Nullable
6037
@Override
61-
public void onActivityCreated(Bundle savedInstanceState) {
62-
super.onActivityCreated(savedInstanceState);
63-
initPreferences();
38+
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
39+
return inflater.inflate(R.layout.fragment_setting, container, false);
6440
}
6541

66-
SharedPreferences.OnSharedPreferenceChangeListener mOnPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
67-
@Override
68-
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
69-
switch (key) {
70-
case "pref_target_step":
71-
int target = mSettingRepository.getTargetStep();
72-
findPreference(key).setSummary(String.format(Locale.getDefault(), "每日运动目标:%d步", target));
73-
break;
74-
default:
75-
break;
76-
}
77-
}
78-
};
79-
80-
private void initPreferences() {
81-
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
82-
((PreferenceGroup) findPreference(getString(R.string.pref_category_memory_resident))).removePreference(
83-
findPreference(getString(R.string.pref_memory_resident_white_list)));
84-
}
85-
86-
Observable.create(new ObservableOnSubscribe<Integer>() {
87-
@Override
88-
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
89-
e.onNext(mSettingRepository.getTargetStep());
90-
}
91-
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Integer>() {
42+
@Override
43+
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
44+
super.onViewCreated(view, savedInstanceState);
45+
mUserLayout = (FrameLayout) view.findViewById(R.id.fragment_setting_user_layout);
46+
mUserLayout.setOnClickListener(new View.OnClickListener() {
9247
@Override
93-
public void accept(Integer target) throws Exception {
94-
findPreference(getString(R.string.pref_target_step)).setSummary(String.format(Locale.getDefault(),
95-
"每日运动目标:%d步",
96-
target));
48+
public void onClick(View v) {
49+
startActivity(new Intent(mContext, UserInfoActivity.class));
9750
}
9851
});
99-
}
100-
101-
@Override
102-
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
103-
handlePreferenceClick(preference);
104-
return super.onPreferenceTreeClick(preferenceScreen, preference);
105-
}
106-
107-
private void handlePreferenceClick(Preference preference) {
108-
if (preference == null || preference.getKey() == null) {
109-
return;
110-
}
111-
switch (preference.getKey()) {
112-
case "pref_memory_resident_white_list":
113-
requestPowerWhiteList();
114-
break;
115-
case "pref_etc_check_update":
116-
// TODO: 2016/12/28
117-
break;
118-
case "pref_etc_issue":
119-
WebViewActivity.startup(getActivity(), "https://github.com/shensky711/Run-With-You/issues", "GitHub Issues");
120-
break;
121-
case "pref_etc_about":
122-
startActivity(new Intent(getActivity(), AboutActivity.class));
123-
break;
124-
default:
125-
break;
126-
}
127-
}
128-
129-
private void requestPowerWhiteList() {
130-
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
131-
return;
132-
}
133-
String packageName = getActivity().getPackageName();
134-
PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
135-
Intent intent = new Intent();
136-
if (pm.isIgnoringBatteryOptimizations(packageName)) {
137-
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
138-
} else {
139-
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
140-
intent.setData(Uri.parse("package:" + packageName));
141-
}
142-
startActivity(intent);
52+
mUsername = (TextView) view.findViewById(R.id.fragment_setting_username);
53+
mUserIcon = (ImageView) view.findViewById(R.id.fragment_setting_user_icon);
14354
}
14455
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package site.hanschen.runwithyou.ui.home.setting;
2+
3+
import android.content.Context;
4+
import android.content.Intent;
5+
import android.content.SharedPreferences;
6+
import android.net.Uri;
7+
import android.os.Build;
8+
import android.os.Bundle;
9+
import android.os.PowerManager;
10+
import android.preference.Preference;
11+
import android.preference.PreferenceFragment;
12+
import android.preference.PreferenceGroup;
13+
import android.preference.PreferenceScreen;
14+
import android.provider.Settings;
15+
16+
import java.util.Locale;
17+
18+
import javax.inject.Inject;
19+
20+
import io.reactivex.Observable;
21+
import io.reactivex.ObservableEmitter;
22+
import io.reactivex.ObservableOnSubscribe;
23+
import io.reactivex.android.schedulers.AndroidSchedulers;
24+
import io.reactivex.functions.Consumer;
25+
import io.reactivex.schedulers.Schedulers;
26+
import site.hanschen.runwithyou.R;
27+
import site.hanschen.runwithyou.application.RunnerApplication;
28+
import site.hanschen.runwithyou.database.repository.SettingRepository;
29+
import site.hanschen.runwithyou.ui.WebViewActivity;
30+
import site.hanschen.runwithyou.ui.about.AboutActivity;
31+
32+
33+
/**
34+
* @author HansChen
35+
*/
36+
public class SettingPreferenceFragment extends PreferenceFragment {
37+
38+
@Inject
39+
SettingRepository mSettingRepository;
40+
@Inject
41+
SharedPreferences mPreferences;
42+
43+
@Override
44+
public void onCreate(Bundle savedInstanceState) {
45+
super.onCreate(savedInstanceState);
46+
DaggerPreferenceComponent.builder()
47+
.applicationComponent(RunnerApplication.getInstance().getAppComponent())
48+
.build()
49+
.inject(SettingPreferenceFragment.this);
50+
addPreferencesFromResource(R.xml.setting_preferences);
51+
mPreferences.registerOnSharedPreferenceChangeListener(mOnPreferenceChangeListener);
52+
}
53+
54+
@Override
55+
public void onDestroy() {
56+
super.onDestroy();
57+
mPreferences.unregisterOnSharedPreferenceChangeListener(mOnPreferenceChangeListener);
58+
}
59+
60+
@Override
61+
public void onActivityCreated(Bundle savedInstanceState) {
62+
super.onActivityCreated(savedInstanceState);
63+
initPreferences();
64+
}
65+
66+
SharedPreferences.OnSharedPreferenceChangeListener mOnPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
67+
@Override
68+
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
69+
switch (key) {
70+
case "pref_target_step":
71+
int target = mSettingRepository.getTargetStep();
72+
findPreference(key).setSummary(String.format(Locale.getDefault(), "每日运动目标:%d步", target));
73+
break;
74+
default:
75+
break;
76+
}
77+
}
78+
};
79+
80+
private void initPreferences() {
81+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
82+
((PreferenceGroup) findPreference(getString(R.string.pref_category_memory_resident))).removePreference(
83+
findPreference(getString(R.string.pref_memory_resident_white_list)));
84+
}
85+
86+
Observable.create(new ObservableOnSubscribe<Integer>() {
87+
@Override
88+
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
89+
e.onNext(mSettingRepository.getTargetStep());
90+
}
91+
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Integer>() {
92+
@Override
93+
public void accept(Integer target) throws Exception {
94+
findPreference(getString(R.string.pref_target_step)).setSummary(String.format(Locale.getDefault(),
95+
"每日运动目标:%d步",
96+
target));
97+
}
98+
});
99+
}
100+
101+
@Override
102+
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
103+
handlePreferenceClick(preference);
104+
return super.onPreferenceTreeClick(preferenceScreen, preference);
105+
}
106+
107+
private void handlePreferenceClick(Preference preference) {
108+
if (preference == null || preference.getKey() == null) {
109+
return;
110+
}
111+
switch (preference.getKey()) {
112+
case "pref_memory_resident_white_list":
113+
requestPowerWhiteList();
114+
break;
115+
case "pref_etc_check_update":
116+
// TODO: 2016/12/28
117+
break;
118+
case "pref_etc_issue":
119+
WebViewActivity.startup(getActivity(), "https://github.com/shensky711/Run-With-You/issues", "GitHub Issues");
120+
break;
121+
case "pref_etc_about":
122+
startActivity(new Intent(getActivity(), AboutActivity.class));
123+
break;
124+
default:
125+
break;
126+
}
127+
}
128+
129+
private void requestPowerWhiteList() {
130+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
131+
return;
132+
}
133+
String packageName = getActivity().getPackageName();
134+
PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
135+
Intent intent = new Intent();
136+
if (pm.isIgnoringBatteryOptimizations(packageName)) {
137+
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
138+
} else {
139+
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
140+
intent.setData(Uri.parse("package:" + packageName));
141+
}
142+
startActivity(intent);
143+
}
144+
}

0 commit comments

Comments
 (0)