395 lines
14 KiB
Java
395 lines
14 KiB
Java
package com.uiui.os.activity;
|
|
|
|
import android.content.BroadcastReceiver;
|
|
import android.content.ComponentName;
|
|
import android.content.Context;
|
|
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;
|
|
import android.os.RemoteException;
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
import android.view.KeyEvent;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.fragment.app.FragmentManager;
|
|
import androidx.fragment.app.FragmentTransaction;
|
|
import androidx.viewpager.widget.ViewPager;
|
|
|
|
import com.alarmclock.uiui.IAlarmAidlInterface;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.JsonObject;
|
|
import com.google.gson.reflect.TypeToken;
|
|
import com.uiui.os.BuildConfig;
|
|
import com.uiui.os.R;
|
|
import com.uiui.os.base.BaseActivity;
|
|
import com.uiui.os.bean.AlarmItem;
|
|
import com.uiui.os.bean.BaseResponse;
|
|
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;
|
|
import com.uiui.os.view.ScaleCircleNavigator;
|
|
|
|
import net.lucode.hackware.magicindicator.MagicIndicator;
|
|
import net.lucode.hackware.magicindicator.ViewPagerHelper;
|
|
|
|
import java.lang.reflect.Type;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import butterknife.BindView;
|
|
import butterknife.ButterKnife;
|
|
import io.reactivex.rxjava3.core.Observer;
|
|
import io.reactivex.rxjava3.disposables.Disposable;
|
|
|
|
public class MainActivity extends BaseActivity {
|
|
private String TAG = MainActivity.class.getSimpleName();
|
|
|
|
@BindView(R.id.viewPager)
|
|
ViewPager viewPager;
|
|
@BindView(R.id.magicIndicator)
|
|
MagicIndicator magicIndicator;
|
|
|
|
private FragmentManager fragmentManager;
|
|
private FragmentTransaction fragmentTransaction;
|
|
private BaseFragmentPagerAdapter adapter;
|
|
private List<Fragment> fragments;
|
|
private CustomFragment customFragment;
|
|
|
|
@Override
|
|
public int getLayoutId() {
|
|
return R.layout.activity_main;
|
|
}
|
|
|
|
@Override
|
|
public void initView() {
|
|
ButterKnife.bind(this);
|
|
fragmentManager = getSupportFragmentManager();
|
|
fragmentTransaction = fragmentManager.beginTransaction();
|
|
fragments = new ArrayList<>();
|
|
adapter = new BaseFragmentPagerAdapter(fragmentManager, fragments);
|
|
// fragmentTransaction.add(R.id.viewPager, appListFragment);
|
|
// fragmentTransaction.commit();
|
|
customFragment = new CustomFragment();
|
|
mAlarmServiceConnection = new ServiceConnection() {
|
|
@Override
|
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
|
Log.e(TAG, "onServiceConnected: ");
|
|
mIAlarmAidlInterface = IAlarmAidlInterface.Stub.asInterface(service);
|
|
getAlarmData();
|
|
}
|
|
|
|
@Override
|
|
public void onServiceDisconnected(ComponentName name) {
|
|
Log.e(TAG, "onServiceDisconnected: ");
|
|
mIAlarmAidlInterface = null;
|
|
}
|
|
};
|
|
bindAlarmService();
|
|
}
|
|
|
|
private void getAlarmData() {
|
|
if (mIAlarmAidlInterface == null) {
|
|
bindAlarmService();
|
|
return;
|
|
}
|
|
try {
|
|
String json = mIAlarmAidlInterface.getAlarm();
|
|
Log.e(TAG, "onServiceConnected: " + json);
|
|
if ("暂无闹钟".equalsIgnoreCase(json) || TextUtils.isEmpty(json)) {
|
|
customFragment.setAlarmItem(null);
|
|
return;
|
|
}
|
|
Type type = new TypeToken<List<AlarmItem>>() {
|
|
}.getType();
|
|
List<AlarmItem> alarmItem = new Gson().fromJson(json, type);
|
|
customFragment.setAlarmItem(alarmItem);
|
|
} catch (RemoteException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private ServiceConnection mAlarmServiceConnection;
|
|
private IAlarmAidlInterface mIAlarmAidlInterface;
|
|
|
|
private void bindAlarmService() {
|
|
if (mIAlarmAidlInterface == null) {
|
|
//这是连接aidl服务的代码
|
|
Intent intent = new Intent();
|
|
intent.setAction("com.alarmclock.uiui.IAlarmAidlInterface");
|
|
intent.setPackage("com.alarmclock.uiui");
|
|
intent.setComponent(new ComponentName("com.alarmclock.uiui", "com.alarmclock.uiui.AIDLAlarmService"));
|
|
bindService(intent, mAlarmServiceConnection, Context.BIND_AUTO_CREATE);
|
|
} else {
|
|
|
|
}
|
|
}
|
|
|
|
private final static int APP_LIST_SIZE = 12;
|
|
|
|
@Override
|
|
public void initData() {
|
|
registmNewAppReceiver();
|
|
registerSOSNumberReceiver();
|
|
fragments.add(customFragment);
|
|
ArrayList<ApplicationInfo> applicationInfoList = APKUtils.queryFilterAppInfo(this);
|
|
int x = 0;
|
|
for (int i = 0; i <= applicationInfoList.size(); i++) {
|
|
if (i != 0 && i % APP_LIST_SIZE == 0) {
|
|
AppListFragment appListFragment = new AppListFragment();
|
|
appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
|
|
fragments.add(appListFragment);
|
|
x = i;
|
|
} else if (i == applicationInfoList.size()) {
|
|
AppListFragment appListFragment = new AppListFragment();
|
|
fragments.add(appListFragment);
|
|
appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
|
|
}
|
|
}
|
|
viewPager.setAdapter(adapter);
|
|
ScaleCircleNavigator scaleCircleNavigator = new ScaleCircleNavigator(this);
|
|
scaleCircleNavigator.setCircleCount(fragments.size());
|
|
scaleCircleNavigator.setNormalCircleColor(Color.DKGRAY);
|
|
scaleCircleNavigator.setSelectedCircleColor(Color.LTGRAY);
|
|
scaleCircleNavigator.setCircleClickListener(new ScaleCircleNavigator.OnCircleClickListener() {
|
|
@Override
|
|
public void onClick(int index) {
|
|
|
|
}
|
|
});
|
|
magicIndicator.setNavigator(scaleCircleNavigator);
|
|
ViewPagerHelper.bind(magicIndicator, viewPager);
|
|
if (fragments.size() > 1) {
|
|
viewPager.setCurrentItem(1);
|
|
}
|
|
}
|
|
|
|
private void addData() {
|
|
List<Fragment> fragmentList = new ArrayList<>();
|
|
ArrayList<ApplicationInfo> applicationInfoList = APKUtils.queryFilterAppInfo(this);
|
|
int x = 0;
|
|
for (int i = 0; i <= applicationInfoList.size(); i++) {
|
|
if (i != 0 && i % APP_LIST_SIZE == 0) {
|
|
AppListFragment appListFragment = new AppListFragment();
|
|
appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
|
|
fragmentList.add(appListFragment);
|
|
x = i;
|
|
} else if (i == applicationInfoList.size()) {
|
|
AppListFragment appListFragment = new AppListFragment();
|
|
fragmentList.add(appListFragment);
|
|
appListFragment.setAppList(new ArrayList<>(applicationInfoList.subList(x, i)));
|
|
}
|
|
}
|
|
for (int i = 1; i <= fragmentList.size(); i++) {
|
|
if (fragments.get(i) != null) {
|
|
adapter.replaceFragment(i, fragmentList.get(i - 1));
|
|
fragments.remove(i);
|
|
fragments.add(i, fragmentList.get(i - 1));
|
|
} else {
|
|
adapter.addFragment(fragmentList.get(i - 1));
|
|
fragments.add(fragmentList.get(i - 1));
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
|
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
|
|
return false;
|
|
}
|
|
return super.onKeyDown(keyCode, event);
|
|
}
|
|
|
|
@Override
|
|
protected void onNewIntent(Intent intent) {
|
|
super.onNewIntent(intent);
|
|
Log.e(TAG, "onNewIntent: " + intent.getAction());
|
|
String action = intent.getAction();
|
|
if (TextUtils.isEmpty(action)) {
|
|
return;
|
|
}
|
|
switch (action) {
|
|
default:
|
|
break;
|
|
case Intent.ACTION_MAIN:
|
|
viewPager.setCurrentItem(1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onConfigurationChanged(@NonNull Configuration newConfig) {
|
|
super.onConfigurationChanged(newConfig);
|
|
}
|
|
|
|
@Override
|
|
protected void onDestroy() {
|
|
super.onDestroy();
|
|
if (mNewAppReceiver != null) {
|
|
unregisterReceiver(mNewAppReceiver);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onStart() {
|
|
super.onStart();
|
|
AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID);
|
|
AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis());
|
|
getAlarmData();
|
|
}
|
|
|
|
@Override
|
|
protected void onResume() {
|
|
super.onResume();
|
|
SendRunningApp(MainActivity.this);
|
|
}
|
|
|
|
private void SendRunningApp(Context context) {
|
|
AppUsedTimeUtils.getInstance().setAppPackageName(BuildConfig.APPLICATION_ID);
|
|
AppUsedTimeUtils.getInstance().setStartTime(System.currentTimeMillis());
|
|
long time = AppUsedTimeUtils.getInstance().getStartTime();
|
|
JsonObject jsonObject = new JsonObject();
|
|
jsonObject.addProperty("app_package", BuildConfig.APPLICATION_ID);
|
|
jsonObject.addProperty("version_name", APKUtils.getAPPVersionName(context, BuildConfig.APPLICATION_ID));
|
|
jsonObject.addProperty("start_time", time / 1000);
|
|
String jsonString = jsonObject.toString();
|
|
Log.e(TAG, "SendRunningApp: " + jsonString);
|
|
NetInterfaceManager.getInstance()
|
|
.getRunningAppObservable(jsonString)
|
|
.subscribe(new Observer<BaseResponse>() {
|
|
@Override
|
|
public void onSubscribe(Disposable d) {
|
|
Log.e("SendRunningApp", "onSubscribe: ");
|
|
}
|
|
|
|
@Override
|
|
public void onNext(BaseResponse baseResponse) {
|
|
Log.e("SendRunningApp", "onSubscribe: " + baseResponse);
|
|
}
|
|
|
|
@Override
|
|
public void onError(Throwable e) {
|
|
Log.e("SendRunningApp", "onError: " + e.getMessage());
|
|
onComplete();
|
|
}
|
|
|
|
@Override
|
|
public void onComplete() {
|
|
Log.e("SendRunningApp", "onComplete: ");
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
@Override
|
|
protected void onRestart() {
|
|
super.onRestart();
|
|
AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis());
|
|
String packagename = AppUsedTimeUtils.getInstance().getAppPackageName();
|
|
Log.e(TAG, "onRestart packagename == " + packagename);
|
|
if (!TextUtils.isEmpty(packagename)) {
|
|
Log.e(TAG, "onRestart: " + APKUtils.getAppNameByPackage(MainActivity.this, packagename));
|
|
Log.e(TAG, "onRestart: " + packagename);
|
|
NetInterfaceManager.getInstance().getAppUsageRecordControl()
|
|
.sendappUsageRecord(Utils.getSerial(),
|
|
APKUtils.getAppNameByPackage(MainActivity.this, packagename),
|
|
packagename,
|
|
AppUsedTimeUtils.getInstance().getStartTime() / 1000,
|
|
AppUsedTimeUtils.getInstance().getEndTime() / 1000)
|
|
.subscribe(new Observer<BaseResponse>() {
|
|
@Override
|
|
public void onSubscribe(Disposable d) {
|
|
Log.e("sendappUsageRecord", "onSubscribe: ");
|
|
}
|
|
|
|
@Override
|
|
public void onNext(BaseResponse baseResponse) {
|
|
Log.e("sendappUsageRecord", "onNext: " + baseResponse);
|
|
}
|
|
|
|
@Override
|
|
public void onError(Throwable e) {
|
|
Log.e("sendappUsageRecord", "onError: " + e.getMessage());
|
|
onComplete();
|
|
}
|
|
|
|
@Override
|
|
public void onComplete() {
|
|
Log.e("sendappUsageRecord", "onComplete: ");
|
|
}
|
|
});
|
|
} else {
|
|
Log.e("onRestart", "app = null" + packagename);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onPause() {
|
|
super.onPause();
|
|
}
|
|
|
|
@Override
|
|
protected void onStop() {
|
|
super.onStop();
|
|
AppUsedTimeUtils.getInstance().setEndTime(System.currentTimeMillis());
|
|
}
|
|
|
|
private void registmNewAppReceiver() {
|
|
mNewAppReceiver = new NewAppReceiver();
|
|
IntentFilter filter = new IntentFilter();
|
|
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
|
|
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
|
|
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
|
|
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
|
|
filter.addDataScheme("package");
|
|
registerReceiver(mNewAppReceiver, filter);
|
|
}
|
|
|
|
private NewAppReceiver mNewAppReceiver;
|
|
|
|
class NewAppReceiver extends BroadcastReceiver {
|
|
@Override
|
|
public void onReceive(Context context, Intent intent) {
|
|
String action = intent.getAction();
|
|
Log.e(TAG, "onReceive: " + action);
|
|
if (Intent.ACTION_PACKAGE_ADDED.equals(action)
|
|
|| Intent.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) {
|
|
addData();
|
|
}
|
|
}
|
|
}
|
|
|
|
private SOSNumberReceiver sosNumberReceiver;
|
|
|
|
private void registerSOSNumberReceiver() {
|
|
if (sosNumberReceiver == null) {
|
|
sosNumberReceiver = new SOSNumberReceiver();
|
|
}
|
|
IntentFilter filter = new IntentFilter();
|
|
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
|
|
filter.addAction("setting_sos");
|
|
registerReceiver(sosNumberReceiver, filter);
|
|
}
|
|
|
|
class SOSNumberReceiver extends BroadcastReceiver {
|
|
@Override
|
|
public void onReceive(Context context, Intent intent) {
|
|
Log.e(TAG, "onReceive: " + intent.getAction());
|
|
String setting_sos = intent.getStringExtra("setting_sos");
|
|
if (TextUtils.isEmpty(setting_sos)) return;
|
|
customFragment.setSosNumber();
|
|
}
|
|
}
|
|
}
|