version:1.5

fix:
update:增加天气预报详情,增加系统应用模块
This commit is contained in:
2022-01-22 11:53:16 +08:00
parent be302d67e2
commit 2e9b26b100
243 changed files with 1724 additions and 238 deletions

View File

@@ -0,0 +1,94 @@
package com.uiui.os.activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.uiui.os.R;
import com.uiui.os.adapter.APPListAdapter;
import com.uiui.os.base.BaseActivity;
import com.uiui.os.bean.AppListInfo;
import com.uiui.os.utils.APKUtils;
import com.uiui.os.utils.BitmapUtils;
import com.uiui.os.view.RecyclerViewSpacesItemDecoration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class APPListActivity extends BaseActivity {
private ImageView back;
private RecyclerView mRecyclerView;
private APPListAdapter adapter;
@Override
public int getLayoutId() {
return R.layout.activity_applist;
}
@Override
public void initView() {
back = findViewById(R.id.iv_back);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
mRecyclerView = findViewById(R.id.recyclerview);
}
@Override
public void initData() {
List<ApplicationInfo> applicationInfoList = APKUtils.getSystemApp(APPListActivity.this);
PackageManager pm = getPackageManager();
if (null != applicationInfoList) {
List<AppListInfo> appinfoList = new ArrayList<>();
for (ApplicationInfo applicationInfo : applicationInfoList) {
AppListInfo info = new AppListInfo(
applicationInfo.loadLabel(pm).toString(),
applicationInfo.packageName,
BitmapUtils.getIconBitmap(APPListActivity.this, applicationInfo.loadIcon(pm))
);
appinfoList.add(info);
}
HashMap<String, Integer> stringIntegerHashMap = new HashMap<>();
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getRealMetrics(dm);
float density = dm.density; // 屏幕密度0.75 / 1.0 / 1.5
int orientation = 0;
orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 16));//top间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 32));//top间距
} else if (orientation == Configuration.ORIENTATION_PORTRAIT) {
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 50));//top间距
stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 100));//top间距
}
// stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 40));//top间距
// stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 20));//底部间距
// stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距
// stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距
adapter = new APPListAdapter(APPListActivity.this);
mRecyclerView.setLayoutManager(new GridLayoutManager(APPListActivity.this, 3));
// rv_list.addItemDecoration(new RecyclerItemDecoration(10, 10, 4));
mRecyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
mRecyclerView.setAdapter(adapter);
adapter.setAppListInfos(appinfoList);
}
}
}

View File

@@ -22,6 +22,7 @@ import android.widget.TextView;
import com.uiui.os.R;
import com.uiui.os.bean.BaseResponse;
import com.uiui.os.network.NetInterfaceManager;
import com.uiui.os.utils.ToastUtil;
import java.util.ArrayList;
import java.util.Arrays;
@@ -154,6 +155,11 @@ public class EmergencyActivity extends AppCompatActivity {
phoneListSet.remove(0);
}
}, 2000);
} else {
if (phoneListSet == null) {
ToastUtil.show("没有设置紧急联系人");
finish();
}
}
}

View File

@@ -1,4 +1,4 @@
package com.uiui.os.activity;
package com.uiui.os.activity.main;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -7,7 +7,6 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Color;
import android.os.IBinder;
@@ -35,7 +34,6 @@ import com.uiui.os.fragment.AppListFragment;
import com.uiui.os.fragment.BaseFragmentPagerAdapter;
import com.uiui.os.fragment.CustomFragment;
import com.uiui.os.network.NetInterfaceManager;
import com.uiui.os.service.MainService;
import com.uiui.os.utils.APKUtils;
import com.uiui.os.utils.AppUsedTimeUtils;
import com.uiui.os.utils.Utils;

View File

@@ -1,4 +1,4 @@
package com.uiui.os.activity;
package com.uiui.os.activity.main;
import com.uiui.os.base.BasePresenter;
import com.uiui.os.base.BaseView;

View File

@@ -1,4 +1,4 @@
package com.uiui.os.activity;
package com.uiui.os.activity.main;
import android.content.Context;
import android.util.Log;

View File

@@ -0,0 +1,95 @@
package com.uiui.os.activity.weather;
import android.content.res.Resources;
import android.widget.TextView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
import com.uiui.os.R;
import com.uiui.os.adapter.WeatherDayApdapter;
import com.uiui.os.base.BaseActivity;
import com.uiui.os.bean.WeatherDailyJson;
import com.uiui.os.utils.ScreenUtils;
import com.uiui.os.view.HorizontalItemDecoration;
import com.uiui.os.view.RecyclerItemDecoration;
import butterknife.BindView;
import butterknife.ButterKnife;
public class WeatherActivity extends BaseActivity implements WeatherContact.WeatherView {
@BindView(R.id.rv_weather)
RecyclerView rv_weather;
@BindView(R.id.tv_location)
TextView tv_location;
private WeatherPresenter mPresenter;
private WeatherDayApdapter mWeatherDayApdapter;
@Override
public int getLayoutId() {
return R.layout.activity_weather;
}
@Override
public void initView() {
ButterKnife.bind(this);
mPresenter = new WeatherPresenter(this);
mPresenter.attachView(this);
mPresenter.setLifecycle(lifecycleSubject);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
Resources resources = getResources();
rv_weather.setLayoutManager(linearLayoutManager);
rv_weather.addItemDecoration(new HorizontalItemDecoration(30, this));//10表示10dp
// rv_weather.setLayoutManager(new GridLayoutManager(this, 3));
// rv_weather.addItemDecoration(new RecyclerItemDecoration(ScreenUtils.dp2px(resources, 10), ScreenUtils.dp2px(resources, 10), 3));
mWeatherDayApdapter = new WeatherDayApdapter();
rv_weather.setAdapter(mWeatherDayApdapter);
}
@Override
public void initData() {
mPresenter.getLocation();
}
@Override
public void setLocation(String location) {
tv_location.setText(location);
mPresenter.getWeatherCache();
}
@Override
public void setWeatherCache(WeatherDailyBean weatherCache) {
if (weatherCache != null) {
mWeatherDayApdapter.setDailyBeans(weatherCache.getDaily());
}
mPresenter.getWeather();
}
@Override
public void setWeather(WeatherDailyBean weather) {
if (weather != null) {
mWeatherDayApdapter.setDailyBeans(weather.getDaily());
}
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mPresenter.detachView();
}
}

View File

@@ -0,0 +1,30 @@
package com.uiui.os.activity.weather;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
import com.uiui.os.base.BasePresenter;
import com.uiui.os.base.BaseView;
import com.uiui.os.bean.AlarmClockData;
import com.uiui.os.bean.WeatherDailyJson;
import java.util.List;
public class WeatherContact {
public interface Presenter extends BasePresenter<WeatherView> {
//获取定位缓存
void getLocation();
//获取天气缓存
void getWeatherCache();
//获取天气
void getWeather();
}
public interface WeatherView extends BaseView {
//设置定位缓存
void setLocation(String location);
//设置天气缓存
void setWeatherCache(WeatherDailyBean weatherCache);
//设置天气
void setWeather(WeatherDailyBean weather);
}
}

View File

@@ -0,0 +1,105 @@
package com.uiui.os.activity.weather;
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import com.amap.api.location.AMapLocation;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
import com.qweather.sdk.view.QWeather;
import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.uiui.os.bean.AlarmClockData;
import com.uiui.os.bean.BaseResponse;
import com.uiui.os.bean.WeatherDailyJson;
import com.uiui.os.network.NetInterfaceManager;
import com.uiui.os.utils.AlarmUtils;
import com.uiui.os.utils.AmapManager;
import java.lang.reflect.Type;
import java.util.List;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
/**
* MainActivity和MainService 的 Presenter
*
* @author jgy02
*/
public class WeatherPresenter implements WeatherContact.Presenter {
private static final String TAG = WeatherPresenter.class.getSimpleName();
private static final String WEATHER_DAILY_KEY = "WEATHER_DAILY_JSON_STRING";
private WeatherContact.WeatherView mView;
private Context mContext;
private MMKV mMMKV = MMKV.defaultMMKV();
private BehaviorSubject<ActivityEvent> lifecycle;
public void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<ActivityEvent> getLifecycle() {
return lifecycle;
}
public WeatherPresenter(Context context) {
this.mContext = context;
Log.e(TAG, "WeatherPresenter: " + context.getClass());
}
@Override
public void attachView(@NonNull WeatherContact.WeatherView view) {
this.mView = view;
}
@Override
public void detachView() {
this.mView = null;
}
@Override
public void getLocation() {
AMapLocation aMapLocation = AmapManager.getInstance().getNowAMapLocation();
String location = "未知";
if (aMapLocation != null) {
location = aMapLocation.getCity() + "\t" + aMapLocation.getDistrict();
}
mView.setLocation(location);
}
@Override
public void getWeatherCache() {
// TODO: 2022/1/21 读取json反序列化排序
String jsonString = mMMKV.decodeString(WEATHER_DAILY_KEY, "");
Type type = new TypeToken<WeatherDailyBean>() {
}.getType();
WeatherDailyBean weatherDailyBean = new Gson().fromJson(jsonString, type);
mView.setWeatherCache(weatherDailyBean);
}
@Override
public void getWeather() {
QWeather.getWeather7D(mContext, AmapManager.getInstance().getLocation(), new QWeather.OnResultWeatherDailyListener() {
@Override
public void onError(Throwable throwable) {
Log.e("getWeather", "onError: " + throwable.getMessage());
mView.setWeather(null);
}
@Override
public void onSuccess(WeatherDailyBean weatherDailyBean) {
String jsonString = new Gson().toJson(weatherDailyBean);
Log.e("getWeather", "onSuccess: " + jsonString);
mMMKV.encode(WEATHER_DAILY_KEY, jsonString);
mView.setWeather(weatherDailyBean);
}
});
}
}