Merge pull request #405 from okcaptain/dev

Dev
pull/406/head
okcaptain 2 years ago committed by GitHub
commit 734bc45434
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 13
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java
  3. 87
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/LanguageDialog.java
  4. 29
      app/src/leanback/res/layout/activity_setting_custom.xml
  5. 3
      app/src/main/java/com/fongmi/android/tv/App.java
  6. 13
      app/src/main/java/com/fongmi/android/tv/Setting.java
  7. 34
      app/src/main/java/com/fongmi/android/tv/utils/LanguageUtil.java
  8. 6
      app/src/main/java/com/fongmi/android/tv/utils/Util.java
  9. 7
      app/src/main/res/values-zh-rCN/strings.xml
  10. 7
      app/src/main/res/values-zh-rTW/strings.xml
  11. 7
      app/src/main/res/values/strings.xml
  12. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java
  13. 15
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java
  14. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  15. 25
      app/src/mobile/res/layout/fragment_setting_custom.xml
  16. 8
      quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java
  17. 3
      quickjs/src/main/java/com/fongmi/quickjs/utils/Crypto.java

@ -14,6 +14,7 @@ import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.dialog.ButtonsDialog;
import com.fongmi.android.tv.ui.dialog.DisplayDialog;
import com.fongmi.android.tv.ui.dialog.LanguageDialog;
import com.fongmi.android.tv.ui.dialog.MenuKeyDialog;
import com.fongmi.android.tv.ui.dialog.X5WebViewDialog;
import com.fongmi.android.tv.utils.ResUtil;
@ -59,6 +60,7 @@ public class SettingCustomActivity extends BaseActivity {
mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch()));
mBinding.homeUIText.setText((homeUI = ResUtil.getStringArray(R.array.select_home_ui))[Setting.getHomeUI()]);
mBinding.homeHistoryText.setText(getSwitch(Setting.isHomeHistory()));
mBinding.languageText.setText((ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]);
mBinding.parseWebviewText.setText((parseWebview = ResUtil.getStringArray(R.array.select_parse_webview))[Setting.getParseWebView()]);
}
@ -79,7 +81,9 @@ public class SettingCustomActivity extends BaseActivity {
mBinding.homeUI.setOnClickListener(this::setHomeUI);
mBinding.homeButtons.setOnClickListener(this::onHomeButtons);
mBinding.homeHistory.setOnClickListener(this::setHomeHistory);
mBinding.setLanguage.setOnClickListener(this::setLanguage);
mBinding.parseWebview.setOnClickListener(this::setParseWebview);
}
private void setQuality(View view) {
@ -174,6 +178,15 @@ public class SettingCustomActivity extends BaseActivity {
mBinding.homeHistoryText.setText(getSwitch(Setting.isHomeHistory()));
}
private void setLanguage(View view) {
LanguageDialog.create(this).show();
}
public void setLanguageText() {
mBinding.languageText.setText((ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]);
}
private void setParseWebview(View view) {
int index = Setting.getParseWebView();
Setting.putParseWebView(index = index == parseWebview.length - 1 ? 0 : ++index);

@ -19,6 +19,7 @@ import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.api.config.WallConfig;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.LanguageUtil;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Util;
@ -37,6 +38,7 @@ public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LanguageUtil.setLanguage(this.getResources(),Setting.getLanguage());
setContentView(getBinding().getRoot());
EventBus.getDefault().register(this);
Util.hideSystemUI(this);

@ -0,0 +1,87 @@
package com.fongmi.android.tv.ui.dialog;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.WindowManager;
import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.GridLayoutManager;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.databinding.DialogMenuBinding;
import com.fongmi.android.tv.ui.activity.SettingCustomActivity;
import com.fongmi.android.tv.ui.adapter.MenuAdapter;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Util;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class LanguageDialog implements MenuAdapter.OnClickListener {
private final DialogMenuBinding binding;
private final MenuAdapter adapter;
private final AlertDialog dialog;
private final Activity activity;
public static LanguageDialog create(Activity activity) {
return new LanguageDialog(activity);
}
public LanguageDialog(Activity activity) {
String[] items = ResUtil.getStringArray(R.array.select_language);
List<String> mItems = new ArrayList<>(Arrays.asList(items));
this.adapter = new MenuAdapter(this, mItems);
this.activity = activity;
this.binding = DialogMenuBinding.inflate(LayoutInflater.from(activity));
this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create();
}
public void show() {
initView();
}
private int getCount() {
return 1;
}
private float getWidth() {
return 0.4f + (getCount() - 1) * 0.2f;
}
private void initView() {
setRecyclerView();
setDialog();
}
private void setRecyclerView() {
binding.recycler.setAdapter(adapter);
binding.recycler.setHasFixedSize(true);
binding.recycler.setItemAnimator(null);
binding.recycler.addItemDecoration(new SpaceItemDecoration(getCount(), 16));
binding.recycler.setLayoutManager(new GridLayoutManager(dialog.getContext(), getCount()));
binding.recycler.post(() -> binding.recycler.scrollToPosition(Setting.getLanguage()));
}
private void setDialog() {
WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.width = (int) (ResUtil.getScreenWidth() * getWidth());
dialog.getWindow().setAttributes(params);
dialog.getWindow().setDimAmount(0);
dialog.show();
}
@Override
public void onItemClick(int position) {
if (dialog != null) dialog.dismiss();
Setting.putLanguage(position);
((SettingCustomActivity) activity).setLanguageText();
Util.restartApp(activity);
}
}

@ -475,6 +475,7 @@
android:id="@+id/parseWebview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="1"
android:background="@drawable/selector_item"
android:focusable="true"
@ -500,6 +501,34 @@
</LinearLayout>
<LinearLayout
android:id="@+id/setLanguage"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_language"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/languageText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="中文" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

@ -14,6 +14,7 @@ import androidx.core.os.HandlerCompat;
import com.fongmi.android.tv.api.config.LiveConfig;
import com.fongmi.android.tv.ui.activity.CrashActivity;
import com.fongmi.android.tv.utils.LanguageUtil;
import com.fongmi.android.tv.utils.Notify;
import com.github.catvod.Init;
import com.github.catvod.bean.Doh;
@ -84,6 +85,7 @@ public class App extends Application {
private void setActivity(Activity activity) {
this.activity = activity;
LanguageUtil.setLanguage(getResources(),Setting.getLanguage());
}
private LogAdapter getLogAdapter() {
@ -144,6 +146,7 @@ public class App extends Application {
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
}
});
}
@Override

@ -5,8 +5,11 @@ import android.content.Intent;
import android.provider.Settings;
import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.utils.LanguageUtil;
import com.github.catvod.utils.Prefers;
import java.util.Locale;
public class Setting {
public static String getDoh() {
@ -477,6 +480,14 @@ public class Setting {
return Math.min(Prefers.getInt("config_cache", 0), 2);
}
public static void putLanguage(int key) {
Prefers.put("language", key);
}
public static int getLanguage() {
return Prefers.getInt("language", LanguageUtil.locale());
}
public static void putParseWebView(int key) {
Prefers.put("parse_webview", key);
}
@ -484,4 +495,6 @@ public class Setting {
public static int getParseWebView() {
return Prefers.getInt("parse_webview", 0);
}
}

@ -0,0 +1,34 @@
package com.fongmi.android.tv.utils;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import java.util.Locale;
public class LanguageUtil {
public static void setLanguage(Resources resources, int lang) {
resources.getConfiguration().locale = getLocale(lang);
resources.updateConfiguration(resources.getConfiguration(), resources.getDisplayMetrics());
}
public static int locale() {
if (Locale.getDefault().getLanguage().equals("zh")) {
if (Locale.getDefault().getCountry().equals("TW")) {
return 2;
} else {
return 1;
}
} else {
return 0;
}
}
private static Locale getLocale(int lang) {
if (lang == 0) return Locale.ENGLISH;
else if (lang == 1) return Locale.CHINESE;
else if (lang == 2) return Locale.TRADITIONAL_CHINESE;
else return Locale.ENGLISH;
}
}

@ -186,4 +186,10 @@ public class Util {
return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
}
public static void restartApp(Activity activity) {
Intent intent = activity.getBaseContext().getPackageManager().getLaunchIntentForPackage(activity.getBaseContext().getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(intent);
}
}

@ -80,6 +80,7 @@
<string name="setting_quality">图片品质</string>
<string name="setting_size">图片尺寸</string>
<string name="setting_aggregated_search">聚合搜索</string>
<string name="setting_language">语言设置</string>
<string name="setting_parse_webview">嗅探内核</string>
<string name="setting_fullscreen_menu_key">全屏菜单键</string>
<string name="setting_home_menu_key">首页菜单键</string>
@ -259,6 +260,12 @@
<item>设置页面</item>
</string-array>
<string-array name="select_language">
<item>英文</item>
<item>简体中文</item>
<item>繁体中文</item>
</string-array>
<string-array name="select_parse_webview">
<item>系统</item>
<item>X5 WebView</item>

@ -80,6 +80,7 @@
<string name="setting_quality">圖片品質</string>
<string name="setting_size">圖片尺寸</string>
<string name="setting_aggregated_search">聚合搜索</string>
<string name="setting_language">語言設置</string>
<string name="setting_parse_webview">嗅探內核</string>
<string name="setting_fullscreen_menu_key">全屏選單鍵</string>
<string name="setting_home_menu_key">首頁選單鍵</string>
@ -259,6 +260,12 @@
<item>設置頁面</item>
</string-array>
<string-array name="select_language">
<item>英文</item>
<item>簡體中文</item>
<item>繁體中文</item>
</string-array>
<string-array name="select_parse_webview">
<item>系統</item>
<item>X5 WebView</item>

@ -80,6 +80,7 @@
<string name="setting_quality">Image quality</string>
<string name="setting_size">Image size</string>
<string name="setting_aggregated_search">Aggregated search</string>
<string name="setting_language">Lanuage setting</string>
<string name="setting_parse_webview">Parse webview</string>
<string name="setting_fullscreen_menu_key">Fullscreen menu key</string>
<string name="setting_home_menu_key">Home menu key</string>
@ -259,6 +260,12 @@
<item>Setting page</item>
</string-array>
<string-array name="select_language">
<item>English</item>
<item>Simplified Chinese</item>
<item>Traditional Chinese</item>
</string-array>
<string-array name="select_parse_webview">
<item>System</item>
<item>X5 WebView</item>

@ -19,6 +19,7 @@ import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.api.config.WallConfig;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.LanguageUtil;
import com.fongmi.android.tv.utils.ResUtil;
import org.greenrobot.eventbus.EventBus;
@ -34,6 +35,7 @@ public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LanguageUtil.setLanguage(this.getResources(),Setting.getLanguage());
if (transparent()) setTransparent(this);
setContentView(getBinding().getRoot());
EventBus.getDefault().register(this);

@ -14,6 +14,7 @@ import com.fongmi.android.tv.databinding.FragmentSettingCustomBinding;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.ui.base.BaseFragment;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Util;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.Locale;
@ -23,6 +24,8 @@ public class SettingCustomFragment extends BaseFragment {
private FragmentSettingCustomBinding mBinding;
private String[] size;
private String[] lang;
public static SettingCustomFragment newInstance() {
return new SettingCustomFragment();
}
@ -44,6 +47,7 @@ public class SettingCustomFragment extends BaseFragment {
mBinding.incognitoText.setText(getSwitch(Setting.isIncognito()));
mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch()));
mBinding.homeChangeConfigText.setText(getSwitch(Setting.isHomeChangeConfig()));
mBinding.languageText.setText((lang = ResUtil.getStringArray(R.array.select_language))[Setting.getLanguage()]);
}
@Override
@ -56,6 +60,8 @@ public class SettingCustomFragment extends BaseFragment {
mBinding.incognito.setOnClickListener(this::setIncognito);
mBinding.aggregatedSearch.setOnClickListener(this::setAggregatedSearch);
mBinding.homeChangeConfig.setOnClickListener(this::setHomeChangeConfig);
mBinding.language.setOnClickListener(this::setLanguage);
}
private boolean onTitle(View view) {
@ -111,4 +117,13 @@ public class SettingCustomFragment extends BaseFragment {
RefreshEvent.config();
}
private void setLanguage(View view) {
new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_language).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(lang, Setting.getLanguage(), (dialog, which) -> {
mBinding.languageText.setText(lang[which]);
Setting.putLanguage(which);
dialog.dismiss();
Util.restartApp(getActivity());
}).show();
}
}

@ -54,6 +54,7 @@ import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Trans;
import com.google.common.net.HttpHeaders;
import com.permissionx.guolindev.PermissionX;
import java.security.SecureRandom;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@ -161,7 +162,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
private void updateHot() {
App.post(mRunnable, 10 * 1000);
if (mHots.isEmpty() || mHots.size() < 10) return;
mBinding.hot.setText(mHots.get(new Random().nextInt(11)));
mBinding.hot.setText(mHots.get(new SecureRandom().nextInt(11)));
}
private Result handle(Result result) {

@ -206,6 +206,31 @@
</LinearLayout>
<LinearLayout
android:id="@+id/language"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_language"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/languageText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="中文" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

@ -1,7 +1,6 @@
package com.fongmi.quickjs.utils;
import com.fongmi.quickjs.bean.Req;
import com.github.catvod.net.OkCookieJar;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Json;
import com.github.catvod.utils.Util;
@ -69,6 +68,7 @@ public class Connect {
if (req.getData() != null && "json".equals(req.getPostType())) return getJsonBody(req);
if (req.getData() != null && "form".equals(req.getPostType())) return getFormBody(req);
if (req.getData() != null && "form-data".equals(req.getPostType())) return getFormDataBody(req);
if (req.getData() != null && "raw".equals(req.getPostType())) return getRawBody(req);
if (req.getBody() != null && contentType != null) return RequestBody.create(req.getBody(), MediaType.get(contentType));
return RequestBody.create("", null);
}
@ -77,6 +77,10 @@ public class Connect {
return RequestBody.create(req.getData().toString(), MediaType.get("application/json; charset=utf-8"));
}
private static RequestBody getRawBody(Req req) {
return RequestBody.create(req.getData().toString(), MediaType.get("application/json; charset=utf-8"));
}
private static RequestBody getFormBody(Req req) {
FormBody.Builder builder = new FormBody.Builder();
Map<String, String> params = Json.toMap(req.getData());
@ -92,6 +96,8 @@ public class Connect {
return builder.build();
}
private static void setHeader(QuickJSContext ctx, Response res, JSObject object) {
for (Map.Entry<String, List<String>> entry : res.headers().toMultimap().entrySet()) {
if (entry.getValue().size() == 1) object.setProperty(entry.getKey(), entry.getValue().get(0));

@ -2,8 +2,6 @@ package com.fongmi.quickjs.utils;
import android.util.Base64;
import com.github.catvod.utils.Util;
import java.security.Key;
import java.security.KeyFactory;
import java.security.PublicKey;
@ -16,6 +14,7 @@ import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import com.github.catvod.utils.Util;
public class Crypto {

Loading…
Cancel
Save