diff --git a/app/build.gradle b/app/build.gradle
index 5fbd7bf..860bb0a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -23,6 +23,8 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ vectorDrawables.useSupportLibrary = true
+
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
@@ -218,6 +220,11 @@ dependencies {
//glide
implementation 'com.github.bumptech.glide:glide:4.13.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.1'
+ // SVG支持库
+ implementation 'com.caverock:androidsvg:1.4'
+ // 如果需要,添加Glide SVG模块(社区版)
+ // implementation 'com.github.qoqa:glide-svg:2.0.4'
+
//RxJava
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
@@ -323,6 +330,6 @@ dependencies {
implementation 'com.github.getActivity:XXPermissions:20.0'
//autosize会改变第三方view的大小
//https://github.com/JessYanCoding/AndroidAutoSize
- implementation 'me.jessyan:autosize:1.2.1'
+// implementation 'me.jessyan:autosize:1.2.1'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 973fbb2..9ca73d3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -146,17 +146,9 @@
android:value="rS7n0XrNj0HTswA5aA3LGZhcUubEbqnv" />
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/ttstd/dialer/activity/main/MainActivity.java b/app/src/main/java/com/ttstd/dialer/activity/main/MainActivity.java
index d4cf87c..f3c7562 100644
--- a/app/src/main/java/com/ttstd/dialer/activity/main/MainActivity.java
+++ b/app/src/main/java/com/ttstd/dialer/activity/main/MainActivity.java
@@ -29,8 +29,6 @@ import net.lucode.hackware.magicindicator.ViewPagerHelper;
import java.util.ArrayList;
import java.util.List;
-import me.jessyan.autosize.AutoSize;
-
public class MainActivity extends BaseMvvmActivity {
private static final String TAG = "MainActivity";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
@@ -172,7 +170,6 @@ public class MainActivity extends BaseMvvmActivity>() {
+ @Override
+ public void onChanged(List weatherHourlies) {
+ mHourlyWeatherAdapter.setWeatherHourlyList(weatherHourlies);
+ }
+ });
mViewModel.mWeatherDailyListData.observe(this, new Observer>() {
@Override
public void onChanged(List weatherDailies) {
@@ -92,6 +108,7 @@ public class WeatherMainActivity extends BaseMvvmActivity> mWeather24hData = new MutableLiveData<>();
+
+ public void getWeather24h(String adCode) {
+ Log.e(TAG, "getWeather24h: " + adCode);
+ WeatherManager.getInstance().getWeather24h(adCode, new Callback() {
+ @Override
+ public void onSuccess(WeatherHourlyResponse weatherHourlyResponse) {
+ Log.e("getWeather24h", "onSuccess: " + weatherHourlyResponse);
+ List weatherHourlies = weatherHourlyResponse.getHourly();
+ Log.e("getWeather24h", "onSuccess: " + GsonUtils.toJSONString(weatherHourlies));
+ mWeather24hData.postValue(weatherHourlies);
+ }
+
+ @Override
+ public void onFailure(ErrorResponse errorResponse) {
+ Log.e("getWeather24h", "onFailure: " + errorResponse.getError().getStatus());
+ Log.e("getWeather24h", "onFailure: " + errorResponse.getError().getDetail());
+ }
+
+ @Override
+ public void onException(Throwable throwable) {
+ Log.e("getWeather24h", "onException: " + throwable.getMessage());
+ }
+ });
+ }
+
public MutableLiveData> mWeatherDailyListData = new MutableLiveData<>();
@@ -57,7 +85,7 @@ public class WeatherMainViewModel extends BaseViewModel weatherDailyList = weatherDailyResponse.getDaily();
- Log.e("getWeather10D", "onSuccess: "+ GsonUtils.toJSONString(weatherDailyList));
+ Log.e("getWeather10D", "onSuccess: " + GsonUtils.toJSONString(weatherDailyList));
mWeatherDailyListData.postValue(weatherDailyList);
}
diff --git a/app/src/main/java/com/ttstd/dialer/adapter/HourlyWeatherAdapter.java b/app/src/main/java/com/ttstd/dialer/adapter/HourlyWeatherAdapter.java
new file mode 100644
index 0000000..cad7cd7
--- /dev/null
+++ b/app/src/main/java/com/ttstd/dialer/adapter/HourlyWeatherAdapter.java
@@ -0,0 +1,94 @@
+package com.ttstd.dialer.adapter;
+
+import android.graphics.drawable.PictureDrawable;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.fragment.app.FragmentActivity;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.RequestBuilder;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.qweather.sdk.response.weather.WeatherHourly;
+import com.ttstd.dialer.R;
+import com.ttstd.dialer.glide.GlideApp;
+import com.ttstd.dialer.glide.svg.SvgSoftwareLayerSetter;
+import com.ttstd.dialer.utils.TimeUtils;
+
+import java.util.List;
+
+import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
+
+public class HourlyWeatherAdapter extends RecyclerView.Adapter {
+ private static final String TAG = "HourlyWeatherAdapter";
+
+ private FragmentActivity mContext;
+ private List mWeatherHourlyList;
+ private RequestBuilder requestBuilder;
+
+ public void setWeatherHourlyList(List weatherHourlyList) {
+ mWeatherHourlyList = weatherHourlyList;
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public HourlyWeather onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ mContext = (FragmentActivity) parent.getContext();
+ requestBuilder = GlideApp.with(mContext)
+ .as(PictureDrawable.class)
+ .placeholder(R.drawable.image_loading)
+ .error(R.drawable.not_applicable)
+ .transition(withCrossFade())
+ .listener(new SvgSoftwareLayerSetter());
+ return new HourlyWeather(LayoutInflater.from(mContext).inflate(R.layout.item_hourly_weather, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull HourlyWeather holder, int position) {
+ WeatherHourly weatherHourly = mWeatherHourlyList.get(position);
+ String fxTime = weatherHourly.getFxTime();
+ holder.tv_time.setText(TimeUtils.formatToHourDescription(fxTime));
+ String icon = weatherHourly.getIcon();
+ // 获取资源ID
+ String fileName = "qweather_" + icon; // 替换为你的文件名
+ int resId = mContext.getResources().getIdentifier(fileName, "raw", mContext.getPackageName());
+ if (resId != 0) {
+ // 使用Glide加载,假设已配置SVG支持
+ Glide.with(mContext)
+ .as(PictureDrawable.class)
+ .load(resId) // 加载raw资源ID
+ .diskCacheStrategy(DiskCacheStrategy.NONE) // raw资源通常不缓存
+ .into(holder.iv_icon);
+ } else {
+ // 处理错误
+ Log.e("GlideLoad", "Raw resource not found: " + fileName);
+ }
+
+ holder.tv_temp.setText(weatherHourly.getTemp() + "°");
+ }
+
+ @Override
+ public int getItemCount() {
+ return mWeatherHourlyList == null ? 0 : mWeatherHourlyList.size();
+ }
+
+ public class HourlyWeather extends RecyclerView.ViewHolder {
+ TextView tv_time, tv_temp;
+ ImageView iv_icon;
+
+ public HourlyWeather(@NonNull View itemView) {
+ super(itemView);
+ tv_time = itemView.findViewById(R.id.tv_time);
+ tv_temp = itemView.findViewById(R.id.tv_temp);
+ iv_icon = itemView.findViewById(R.id.iv_icon);
+ }
+ }
+}
diff --git a/app/src/main/java/com/ttstd/dialer/annotations/CustomGlideModule.java b/app/src/main/java/com/ttstd/dialer/annotations/CustomGlideModule.java
deleted file mode 100644
index 49c0a09..0000000
--- a/app/src/main/java/com/ttstd/dialer/annotations/CustomGlideModule.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.ttstd.dialer.annotations;
-
-import android.content.Context;
-
-import androidx.annotation.NonNull;
-
-import com.bumptech.glide.GlideBuilder;
-import com.bumptech.glide.annotation.GlideModule;
-import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
-import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
-import com.bumptech.glide.load.engine.cache.LruResourceCache;
-import com.bumptech.glide.module.AppGlideModule;
-
-@GlideModule
-public class CustomGlideModule extends AppGlideModule {
- @Override
- public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
- super.applyOptions(context, builder);
- //内存缓存
- int memoryCacheSizeBytes = 1024 * 1024 * 32; // 20mb
- builder.setMemoryCache(new LruResourceCache(memoryCacheSizeBytes));
- //Bitmap 池
- int bitmapPoolSizeBytes = 1024 * 1024 * 64; // 30mb
- builder.setBitmapPool(new LruBitmapPool(bitmapPoolSizeBytes));
- //磁盘缓存
- int diskCacheSizeBytes = 1024 * 1024 * 128; // 100MB
- builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskCacheSizeBytes));
-
- }
-}
diff --git a/app/src/main/java/com/ttstd/dialer/base/BaseAlertDialogBuilder.java b/app/src/main/java/com/ttstd/dialer/base/BaseAlertDialogBuilder.java
index 7885e64..e0ad631 100644
--- a/app/src/main/java/com/ttstd/dialer/base/BaseAlertDialogBuilder.java
+++ b/app/src/main/java/com/ttstd/dialer/base/BaseAlertDialogBuilder.java
@@ -9,8 +9,6 @@ import androidx.appcompat.app.AlertDialog;
import com.ttstd.dialer.utils.ScreenUtils;
-import me.jessyan.autosize.AutoSizeCompat;
-
public class BaseAlertDialogBuilder extends AlertDialog.Builder {
/**
@@ -39,9 +37,9 @@ public class BaseAlertDialogBuilder extends AlertDialog.Builder {
@Override
public Resources getResources() {
if (ScreenUtils.isTablet(context)) {
- AutoSizeCompat.autoConvertDensityBaseOnWidth(mResources, ALERT_BASE_WIDTH_TABLE);
+// AutoSizeCompat.autoConvertDensityBaseOnWidth(mResources, ALERT_BASE_WIDTH_TABLE);
} else {
- AutoSizeCompat.autoConvertDensityBaseOnWidth(mResources, ALERT_BASE_WIDTH);
+// AutoSizeCompat.autoConvertDensityBaseOnWidth(mResources, ALERT_BASE_WIDTH);
}
return mResources;
}
diff --git a/app/src/main/java/com/ttstd/dialer/base/BaseApplication.java b/app/src/main/java/com/ttstd/dialer/base/BaseApplication.java
index bbc2d39..4480f1f 100644
--- a/app/src/main/java/com/ttstd/dialer/base/BaseApplication.java
+++ b/app/src/main/java/com/ttstd/dialer/base/BaseApplication.java
@@ -14,6 +14,7 @@ import com.hjq.toast.Toaster;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.mmkv.MMKV;
import com.ttstd.dialer.BuildConfig;
+import com.ttstd.dialer.config.CommonConfig;
import com.ttstd.dialer.manager.AppManager;
import com.ttstd.dialer.manager.MapManager;
import com.ttstd.dialer.manager.WeatherManager;
@@ -62,6 +63,7 @@ public class BaseApplication extends Application {
String rootDir = MMKV.initialize(this);
Log.e(TAG, "mmkv root: " + rootDir);
+ MMKV mmkv = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
/*jpush start*/
JPushInterface.setDebugMode(true);
@@ -101,6 +103,13 @@ public class BaseApplication extends Application {
AppManager.init(this);
MapManager.init(this);
MapManager.getInstance().initMap();
+ boolean manually = mmkv.decodeBool(CommonConfig.MANUALLY_SELECT_LOCATION, false);
+ Log.e(TAG, "init: manually location " + manually);
+ if (manually) {
+
+ } else {
+ MapManager.getInstance().startLocation();
+ }
WeatherManager.init(this);
IconCacheManager.init(this);
}
diff --git a/app/src/main/java/com/ttstd/dialer/base/BaseTransparentActivity.java b/app/src/main/java/com/ttstd/dialer/base/BaseTransparentActivity.java
index e584ff5..0b853dd 100644
--- a/app/src/main/java/com/ttstd/dialer/base/BaseTransparentActivity.java
+++ b/app/src/main/java/com/ttstd/dialer/base/BaseTransparentActivity.java
@@ -15,8 +15,6 @@ import com.ttstd.dialer.R;
import com.ttstd.dialer.base.rx.BaseRxActivity;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
-import me.jessyan.autosize.AutoSizeCompat;
-
public abstract class BaseTransparentActivity extends BaseRxActivity {
public BaseTransparentActivity() {
@@ -48,7 +46,6 @@ public abstract class BaseTransparentActivity extends BaseRxActivity {
@Override
protected void onResume() {
super.onResume();
- AutoSizeCompat.autoConvertDensityOfGlobal(getResources());
}
/**
diff --git a/app/src/main/java/com/ttstd/dialer/fragment/home/HomeFragment.java b/app/src/main/java/com/ttstd/dialer/fragment/home/HomeFragment.java
index 6a85bed..882cfba 100644
--- a/app/src/main/java/com/ttstd/dialer/fragment/home/HomeFragment.java
+++ b/app/src/main/java/com/ttstd/dialer/fragment/home/HomeFragment.java
@@ -167,9 +167,9 @@ public class HomeFragment extends BaseMvvmFragment {
+
+ @Override
+ public boolean handles(@NonNull InputStream source, @NonNull Options options) {
+ // TODO: Can we tell?
+ return true;
+ }
+
+ public Resource