version:1.1

fix:
add:应用使用数据统计
This commit is contained in:
2021-12-25 17:04:52 +08:00
parent 6c2eb5a1a3
commit b481df8671
55 changed files with 3184 additions and 300 deletions

View File

@@ -7,14 +7,16 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
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.text.format.DateUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
@@ -23,24 +25,19 @@ import androidx.fragment.app.FragmentTransaction;
import androidx.viewpager.widget.ViewPager;
import com.alarmclock.uiui.IAlarmAidlInterface;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationListener;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.qweather.sdk.bean.base.Code;
import com.qweather.sdk.bean.base.Lang;
import com.qweather.sdk.bean.base.Unit;
import com.qweather.sdk.bean.weather.WeatherNowBean;
import com.qweather.sdk.view.QWeather;
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.utils.AmapManager;
import com.uiui.os.utils.ApkUtils;
import com.uiui.os.network.NetInterfaceManager;
import com.uiui.os.utils.APKUtils;
import com.uiui.os.utils.TimeUtils;
import com.uiui.os.utils.Utils;
import com.uiui.os.view.ScaleCircleNavigator;
import net.lucode.hackware.magicindicator.MagicIndicator;
@@ -52,6 +49,8 @@ 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();
@@ -111,9 +110,9 @@ public class MainActivity extends BaseActivity {
customFragment.setAlarmItem(null);
return;
}
Type type = new TypeToken<AlarmItem>() {
Type type = new TypeToken<List<AlarmItem>>() {
}.getType();
AlarmItem alarmItem = new Gson().fromJson(json, type);
List<AlarmItem> alarmItem = new Gson().fromJson(json, type);
customFragment.setAlarmItem(alarmItem);
} catch (RemoteException e) {
e.printStackTrace();
@@ -142,7 +141,7 @@ public class MainActivity extends BaseActivity {
public void initData() {
registmNewAppReceiver();
fragments.add(customFragment);
ArrayList<ApplicationInfo> applicationInfoList = ApkUtils.queryFilterAppInfo(this);
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) {
@@ -176,7 +175,7 @@ public class MainActivity extends BaseActivity {
private void addData() {
List<Fragment> fragmentList = new ArrayList<>();
ArrayList<ApplicationInfo> applicationInfoList = ApkUtils.queryFilterAppInfo(this);
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) {
@@ -245,7 +244,58 @@ public class MainActivity extends BaseActivity {
@Override
protected void onResume() {
super.onResume();
String packagename = TimeUtils.getInstance().getAppPackageName();
Log.e("SendcloseApp", "packagename=" + packagename);
TimeUtils.getInstance().setEndTime(System.currentTimeMillis());
if (packagename != null && packagename.length() > 0) {
ApplicationInfo app = APKUtils.getApplicationInfo(this, packagename);
PackageManager pm = getPackageManager();
if (app != null) {
Log.e(TAG, "onResume: " + app.loadLabel(pm).toString());
Log.e(TAG, "onResume: " + app.packageName);
NetInterfaceManager.getInstance().getAppUsageRecordControl()
.sendappUsageRecord(Utils.getSerial(),
app.loadLabel(pm).toString(), app.packageName,
TimeUtils.getInstance().getStartTime() / 1000,
TimeUtils.getInstance().getEndTime() / 1000)
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("onResume", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse baseResponse) {
Log.e("onResume", "onNext: " + baseResponse);
}
@Override
public void onError(Throwable e) {
Log.e("onResume", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("onResume", "onComplete: ");
}
});
TimeUtils.getInstance().setAppPackageName("");
} else {
Log.e("fht", "app = null" + packagename);
}
}
getAlarmData();
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onStop() {
super.onStop();
}
private void registmNewAppReceiver() {
@@ -264,7 +314,10 @@ public class MainActivity extends BaseActivity {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.e(TAG, "onReceive: " + action);
addData();
if (Intent.ACTION_PACKAGE_ADDED.equals(action)
|| Intent.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) {
addData();
}
}
}
}

View File

@@ -0,0 +1,21 @@
package com.uiui.os.activity;
import com.uiui.os.base.BasePresenter;
import com.uiui.os.base.BaseView;
import com.uiui.os.bean.AlarmClockData;
import java.util.List;
public class MainContact {
public interface Presenter extends BasePresenter<MainView> {
//设置所有信息
void getAlarmClock();
}
public interface MainView extends BaseView {
//获取所有信息
void setAlarmClock(List<AlarmClockData> dataList);
}
}

View File

@@ -0,0 +1,90 @@
package com.uiui.os.activity;
import android.content.Context;
import android.util.Log;
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.network.NetInterfaceManager;
import com.uiui.os.utils.AlarmUtils;
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 MainPresenter implements MainContact.Presenter {
private static final String TAG = MainPresenter.class.getSimpleName();
private static final int OK = 200;
private MainContact.MainView mView;
private Context mContext;
private BehaviorSubject<ActivityEvent> lifecycle;
public void setLifecycle(BehaviorSubject<ActivityEvent> lifecycle) {
this.lifecycle = lifecycle;
}
public BehaviorSubject<ActivityEvent> getLifecycle() {
return lifecycle;
}
public MainPresenter(Context context) {
this.mContext = context;
Log.e(TAG, "MainPresenter: " + context.getClass());
}
@Override
public void attachView(@androidx.annotation.NonNull MainContact.MainView view) {
this.mView = view;
}
@Override
public void detachView() {
this.mView = null;
}
@Override
public void getAlarmClock() {
MMKV mmkv = MMKV.defaultMMKV();
NetInterfaceManager.getInstance().getAlarmClockApiObservable()
.subscribe(new Observer<BaseResponse<List<AlarmClockData>>>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("getAlarmClock", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse<List<AlarmClockData>> listBaseResponse) {
Log.e("getAlarmClock", "onNext: "+listBaseResponse);
if (listBaseResponse.code == 200) {
List<AlarmClockData> data = listBaseResponse.data;
AlarmUtils.getInstance().setAlarmClockData(data);
} else {
}
}
@Override
public void onError(Throwable e) {
Log.e("getAlarmClock", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("getAlarmClock", "onComplete: ");
}
});
}
}

View File

@@ -0,0 +1,125 @@
package com.uiui.os.activity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.blankj.utilcode.util.FileUtils;
import com.uiui.os.R;
import com.uiui.os.bean.AlarmClockData;
import com.uiui.os.utils.AlarmUtils;
import com.uiui.os.utils.Utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import butterknife.BindView;
import butterknife.ButterKnife;
public class NoticeActivity extends AppCompatActivity {
@BindView(R.id.tv_title)
TextView tv_title;
@BindView(R.id.bt_ok)
Button bt_ok;
@BindView(R.id.constraintLayout)
ConstraintLayout constraintLayout;
private AlarmClockData alarmClockData;
int code;
private MediaPlayer mediaPlayer;
private String TAG = NoticeActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notice);
ButterKnife.bind(this);
Intent intent = getIntent();
code = intent.getIntExtra("id", -1);
if (code == -1) {
finish();
} else {
HashMap<Integer, AlarmClockData> oldData = AlarmUtils.getInstance().getOldData();
alarmClockData = oldData.get(code);
if (alarmClockData == null) {
finish();
}
showData(alarmClockData);
}
}
private void showData(AlarmClockData alarmClockData) {
tv_title.setText(alarmClockData.getRemarks());
bt_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
HashMap<Integer, AlarmClockData> oldData = AlarmUtils.getInstance().getOldData();
List<AlarmClockData> data = new ArrayList<>();
for (AlarmClockData alarm : oldData.values()) {
if (alarm.getId() == code) {
alarm.setFinished(true);
}
data.add(alarm);
}
AlarmUtils.getInstance().setAlarmString(data);
finish();
}
});
String url = alarmClockData.getVoice();
String md5 = alarmClockData.getVoice_md5();
if (!TextUtils.isEmpty(url)) {
constraintLayout.setVisibility(View.VISIBLE);
String fileName = Utils.getFileNamefromURL(url);
File file = new File(Utils.getDownLoadPath(NoticeActivity.this) + fileName);
String fileMD5 = FileUtils.getFileMD5ToString(file);
// if (!md5.equals(fileMD5)) {
// // TODO: 2021/12/16
// } else {
mediaPlayer = new MediaPlayer();
try {
// 切歌之前先重置,释放掉之前的资源
mediaPlayer.reset();
FileInputStream fis = new FileInputStream(file);
mediaPlayer.setDataSource(fis.getFD());
// 设置播放源
// mediaPlayer.setDataSource(file.getAbsolutePath());
// 开始播放前的准备工作,加载多媒体资源,获取相关信息
mediaPlayer.prepare();
// 开始播放
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "showData: " + e.getMessage());
}
// }
} else {
constraintLayout.setVisibility(View.GONE);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
mediaPlayer = null;
}
}
}