Add site selection

pull/1/head
FongMi 4 years ago
parent 4f108806ca
commit fa0245e5dc
  1. 20
      app/src/main/java/com/fongmi/bear/ApiConfig.java
  2. 3
      app/src/main/java/com/fongmi/bear/bean/Result.java
  3. 27
      app/src/main/java/com/fongmi/bear/bean/Site.java
  4. 13
      app/src/main/java/com/fongmi/bear/model/SiteViewModel.java
  5. 6
      app/src/main/java/com/fongmi/bear/net/OKHttp.java
  6. 36
      app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java
  7. 38
      app/src/main/java/com/fongmi/bear/ui/activity/SettingActivity.java
  8. 12
      app/src/main/java/com/fongmi/bear/ui/activity/SplashActivity.java
  9. 36
      app/src/main/java/com/fongmi/bear/ui/adapter/FuncAdapter.java
  10. 79
      app/src/main/java/com/fongmi/bear/ui/adapter/SiteAdapter.java
  11. 30
      app/src/main/java/com/fongmi/bear/ui/adapter/VodAdapter.java
  12. 6
      app/src/main/java/com/fongmi/bear/utils/Notify.java
  13. 7
      app/src/main/java/com/github/catvod/crawler/JarLoader.java
  14. 4
      app/src/main/res/drawable/selector_item.xml
  15. 6
      app/src/main/res/drawable/selector_site.xml
  16. 4
      app/src/main/res/drawable/selector_vod.xml
  17. 2
      app/src/main/res/drawable/shape_item_focused.xml
  18. 15
      app/src/main/res/drawable/shape_site_focused.xml
  19. 15
      app/src/main/res/drawable/shape_site_normal.xml
  20. 15
      app/src/main/res/drawable/shape_site_selected.xml
  21. 0
      app/src/main/res/drawable/shape_vod_focused.xml
  22. 29
      app/src/main/res/layout/activity_setting.xml
  23. 2
      app/src/main/res/layout/activity_splash.xml
  24. 22
      app/src/main/res/layout/adapter_site.xml
  25. 13
      app/src/main/res/layout/dialog_site.xml
  26. 5
      app/src/main/res/values-zh-rCN/strings.xml
  27. 5
      app/src/main/res/values-zh-rTW/strings.xml
  28. 5
      app/src/main/res/values/colors.xml
  29. 1
      app/src/main/res/values/strings.xml

@ -40,7 +40,7 @@ public class ApiConfig {
private final Handler handler;
private String spider;
private Parse parse;
private Site site;
private Site home;
private static class Loader {
static volatile ApiConfig INSTANCE = new ApiConfig();
@ -51,7 +51,7 @@ public class ApiConfig {
}
public ApiConfig() {
this.site = new Site();
this.home = new Site();
this.sites = new ArrayList<>();
this.parses = new ArrayList<>();
this.lives = new ArrayList<>();
@ -63,7 +63,7 @@ public class ApiConfig {
this.sites.clear();
this.parses.clear();
this.lives.clear();
this.site = new Site();
this.home = new Site();
}
public void loadConfig(Callback callback) {
@ -104,7 +104,7 @@ public class ApiConfig {
sites.add(site);
}
if (sites.size() > 0) {
site = sites.get(0);
setHome(sites.get(0));
}
}
@ -135,7 +135,15 @@ public class ApiConfig {
return new Site();
}
public Site getSite() {
return site;
public List<Site> getSites() {
return sites;
}
public Site getHome() {
return home;
}
public void setHome(Site home) {
this.home = home;
}
}

@ -3,6 +3,7 @@ package com.fongmi.bear.bean;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import java.util.Collections;
import java.util.List;
public class Result {
@ -15,6 +16,6 @@ public class Result {
}
public List<Vod> getList() {
return list;
return list == null ? Collections.emptyList() : list;
}
}

@ -1,12 +1,6 @@
package com.fongmi.bear.bean;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class Site {
@ -27,10 +21,7 @@ public class Site {
@SerializedName("ext")
private String ext;
public static List<Site> arrayFrom(String str) {
Type listType = new TypeToken<ArrayList<Site>>() {}.getType();
return new Gson().fromJson(str, listType);
}
private boolean home;
public String getKey() {
return key;
@ -95,4 +86,20 @@ public class Site {
public void setExt(String ext) {
this.ext = ext;
}
public boolean isHome() {
return home;
}
public void setHome(boolean home) {
this.home = home;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof Site)) return false;
Site it = (Site) obj;
return getKey().equals(it.getKey());
}
}

@ -13,21 +13,22 @@ import java.util.concurrent.Executors;
public class SiteViewModel extends ViewModel {
public static final ExecutorService service = Executors.newFixedThreadPool(5);
public MutableLiveData<Result> result;
public static final ExecutorService mService = Executors.newFixedThreadPool(5);
public MutableLiveData<Result> mResult;
public SiteViewModel() {
this.result = new MutableLiveData<>();
this.mResult = new MutableLiveData<>();
}
public void homeContent(String key) {
Site site = ApiConfig.get().getSite(key);
int type = site.getType();
if (type == 3) {
service.execute(() -> {
mService.execute(() -> {
Spider spider = ApiConfig.get().getCSP(site);
result.postValue(Result.objectFrom(spider.homeContent(false)));
Result result = Result.objectFrom(spider.homeContent(false));
if (result.getList().isEmpty()) result = Result.objectFrom(spider.homeVideoContent());
mResult.postValue(result);
});
}
}

@ -6,7 +6,7 @@ import okhttp3.OkHttpClient;
public class OKHttp {
private final OkHttpClient client;
private final OkHttpClient mClient;
private static class Loader {
static volatile OKHttp INSTANCE = new OKHttp();
@ -17,7 +17,7 @@ public class OKHttp {
}
public OKHttp() {
client = getBuilder().build();
mClient = getBuilder().build();
}
private OkHttpClient.Builder getBuilder() {
@ -25,6 +25,6 @@ public class OKHttp {
}
public OkHttpClient client() {
return client;
return mClient;
}
}

@ -20,10 +20,10 @@ import com.fongmi.bear.ui.custom.SpaceItemDecoration;
public class HomeActivity extends BaseActivity {
private ActivityHomeBinding binding;
private SiteViewModel siteViewModel;
private FuncAdapter funcAdapter;
private VodAdapter vodAdapter;
private ActivityHomeBinding mBinding;
private SiteViewModel mSiteViewModel;
private FuncAdapter mFuncAdapter;
private VodAdapter mVodAdapter;
public static void start(Activity activity) {
activity.startActivity(new Intent(activity, HomeActivity.class));
@ -32,7 +32,7 @@ public class HomeActivity extends BaseActivity {
@Override
protected ViewBinding getBinding() {
return binding = ActivityHomeBinding.inflate(getLayoutInflater());
return mBinding = ActivityHomeBinding.inflate(getLayoutInflater());
}
@Override
@ -44,28 +44,28 @@ public class HomeActivity extends BaseActivity {
@Override
protected void initEvent() {
funcAdapter.setOnItemClickListener(this::onFuncClick);
mFuncAdapter.setOnItemClickListener(this::onFuncClick);
}
private void setRecyclerView() {
binding.func.setHasFixedSize(true);
binding.func.setNestedScrollingEnabled(false);
binding.func.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
binding.func.setAdapter(funcAdapter = new FuncAdapter());
binding.update.setHasFixedSize(true);
binding.update.setNestedScrollingEnabled(false);
binding.update.setLayoutManager(new GridLayoutManager(this, 5));
binding.update.addItemDecoration(new SpaceItemDecoration(5, 12, false, 0));
binding.update.setAdapter(vodAdapter = new VodAdapter());
mBinding.func.setHasFixedSize(true);
mBinding.func.setNestedScrollingEnabled(false);
mBinding.func.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
mBinding.func.setAdapter(mFuncAdapter = new FuncAdapter());
mBinding.update.setHasFixedSize(true);
mBinding.update.setNestedScrollingEnabled(false);
mBinding.update.setLayoutManager(new GridLayoutManager(this, 5));
mBinding.update.addItemDecoration(new SpaceItemDecoration(5, 12, false, 0));
mBinding.update.setAdapter(mVodAdapter = new VodAdapter());
}
private void setViewModel() {
siteViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
siteViewModel.result.observe(this, result -> vodAdapter.addAll(result.getList()));
mSiteViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mSiteViewModel.mResult.observe(this, result -> mVodAdapter.addAll(result.getList()));
}
private void homeContent() {
siteViewModel.homeContent(ApiConfig.get().getSite().getKey());
mSiteViewModel.homeContent(ApiConfig.get().getHome().getKey());
}
private void onFuncClick(Func item) {

@ -5,18 +5,23 @@ import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.viewbinding.ViewBinding;
import com.fongmi.bear.ApiConfig;
import com.fongmi.bear.bean.Site;
import com.fongmi.bear.databinding.ActivitySettingBinding;
import com.fongmi.bear.databinding.DialogConfigBinding;
import com.fongmi.bear.databinding.DialogSiteBinding;
import com.fongmi.bear.net.Callback;
import com.fongmi.bear.ui.adapter.SiteAdapter;
import com.fongmi.bear.utils.Notify;
import com.fongmi.bear.utils.Prefers;
public class SettingActivity extends BaseActivity {
private ActivitySettingBinding binding;
private ActivitySettingBinding mBinding;
private SiteAdapter mAdapter;
public static void start(Activity activity) {
activity.startActivityForResult(new Intent(activity, SettingActivity.class), 1000);
@ -24,17 +29,21 @@ public class SettingActivity extends BaseActivity {
@Override
protected ViewBinding getBinding() {
return binding = ActivitySettingBinding.inflate(getLayoutInflater());
return mBinding = ActivitySettingBinding.inflate(getLayoutInflater());
}
@Override
protected void initView() {
binding.url.setText(Prefers.getUrl());
mBinding.home.setText(ApiConfig.get().getHome().getName());
mBinding.url.setText(Prefers.getUrl());
mAdapter = new SiteAdapter();
}
@Override
protected void initEvent() {
binding.config.setOnClickListener(this::showConfig);
mBinding.config.setOnClickListener(this::showConfig);
mBinding.site.setOnClickListener(this::showSite);
mAdapter.setOnItemClickListener(this::onSiteClick);
}
private void showConfig(View view) {
@ -43,13 +52,13 @@ public class SettingActivity extends BaseActivity {
bindingDialog.url.setSelection(bindingDialog.url.getText().length());
Notify.show(this, bindingDialog.getRoot(), (dialogInterface, i) -> {
Prefers.put("url", bindingDialog.url.getText().toString().trim());
binding.url.setText(Prefers.getUrl());
mBinding.url.setText(Prefers.getUrl());
Notify.progress(this);
reloadConfig();
loadConfig();
});
}
private void reloadConfig() {
private void loadConfig() {
ApiConfig.get().loadConfig(new Callback() {
@Override
public void success() {
@ -63,4 +72,19 @@ public class SettingActivity extends BaseActivity {
}
});
}
private void showSite(View view) {
DialogSiteBinding bindingDialog = DialogSiteBinding.inflate(LayoutInflater.from(this));
bindingDialog.site.setHasFixedSize(true);
bindingDialog.site.setLayoutManager(new LinearLayoutManager(this));
bindingDialog.site.setAdapter(mAdapter);
mAdapter.addAll(ApiConfig.get().getSites());
Notify.show(this, bindingDialog.getRoot());
}
public void onSiteClick(Site item) {
mBinding.home.setText(item.getName());
ApiConfig.get().setHome(item);
setResult(RESULT_OK);
}
}

@ -15,25 +15,25 @@ import com.fongmi.bear.utils.Notify;
@SuppressLint("CustomSplashScreen")
public class SplashActivity extends BaseActivity {
private ActivitySplashBinding binding;
private ActivitySplashBinding mBinding;
@Override
protected ViewBinding getBinding() {
return binding = ActivitySplashBinding.inflate(getLayoutInflater());
return mBinding = ActivitySplashBinding.inflate(getLayoutInflater());
}
@Override
protected void initView() {
binding.title.animate().alpha(1).setDuration(2000).setListener(onAnimationEnd()).start();
mBinding.title.animate().alpha(1).setDuration(2000).setListener(onAnimationEnd()).start();
}
private AnimatorListenerAdapter onAnimationEnd() {
return new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
binding.title.setVisibility(View.GONE);
binding.progress.animate().alpha(1).setDuration(500).start();
binding.info.animate().alpha(1).setDuration(500).start();
mBinding.title.setVisibility(View.GONE);
mBinding.progress.animate().alpha(1).setDuration(500).start();
mBinding.info.animate().alpha(1).setDuration(500).start();
loadConfig();
}
};

@ -14,10 +14,10 @@ import com.fongmi.bear.databinding.AdapterFuncBinding;
import java.util.ArrayList;
import java.util.List;
public class FuncAdapter extends RecyclerView.Adapter<FuncAdapter.FuncHolder> {
public class FuncAdapter extends RecyclerView.Adapter<FuncAdapter.ViewHolder> {
private OnItemClickListener listener;
private List<Func> items;
private OnItemClickListener mListener;
private List<Func> mItems;
public FuncAdapter() {
addAll();
@ -28,14 +28,14 @@ public class FuncAdapter extends RecyclerView.Adapter<FuncAdapter.FuncHolder> {
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
this.mListener = listener;
}
class FuncHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private final AdapterFuncBinding binding;
public FuncHolder(@NonNull AdapterFuncBinding binding) {
public ViewHolder(@NonNull AdapterFuncBinding binding) {
super(binding.getRoot());
this.binding = binding;
itemView.setOnClickListener(this);
@ -43,33 +43,33 @@ public class FuncAdapter extends RecyclerView.Adapter<FuncAdapter.FuncHolder> {
@Override
public void onClick(View view) {
listener.onItemClick(items.get(getLayoutPosition()));
mListener.onItemClick(mItems.get(getLayoutPosition()));
}
}
public void addAll() {
items = new ArrayList<>();
items.add(Func.create(R.string.home_vod));
items.add(Func.create(R.string.home_live));
items.add(Func.create(R.string.home_search));
items.add(Func.create(R.string.home_push));
items.add(Func.create(R.string.home_setting));
mItems = new ArrayList<>();
mItems.add(Func.create(R.string.home_vod));
mItems.add(Func.create(R.string.home_live));
mItems.add(Func.create(R.string.home_search));
mItems.add(Func.create(R.string.home_push));
mItems.add(Func.create(R.string.home_setting));
}
@Override
public int getItemCount() {
return items.size();
return mItems.size();
}
@NonNull
@Override
public FuncAdapter.FuncHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new FuncHolder(AdapterFuncBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
public FuncAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(AdapterFuncBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
}
@Override
public void onBindViewHolder(@NonNull FuncAdapter.FuncHolder holder, int position) {
Func item = items.get(position);
public void onBindViewHolder(@NonNull FuncAdapter.ViewHolder holder, int position) {
Func item = mItems.get(position);
holder.binding.icon.setImageResource(item.getDrawable());
holder.binding.text.setText(item.getText());
}

@ -0,0 +1,79 @@
package com.fongmi.bear.ui.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.bear.bean.Site;
import com.fongmi.bear.databinding.AdapterSiteBinding;
import java.util.ArrayList;
import java.util.List;
public class SiteAdapter extends RecyclerView.Adapter<SiteAdapter.ViewHolder> {
private OnItemClickListener mListener;
private List<Site> mItems;
public SiteAdapter() {
mItems = new ArrayList<>();
}
public interface OnItemClickListener {
void onItemClick(Site item);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.mListener = listener;
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private final AdapterSiteBinding binding;
public ViewHolder(@NonNull AdapterSiteBinding binding) {
super(binding.getRoot());
this.binding = binding;
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Site item = mItems.get(getLayoutPosition());
setHome(getLayoutPosition());
mListener.onItemClick(item);
}
}
private void setHome(int position) {
for (int i = 0; i < mItems.size(); i++) mItems.get(i).setHome(i == position);
notifyItemRangeChanged(0, mItems.size());
}
public void addAll(List<Site> items) {
mItems.clear();
mItems.addAll(items);
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return mItems.size();
}
@NonNull
@Override
public SiteAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(AdapterSiteBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
}
@Override
public void onBindViewHolder(@NonNull SiteAdapter.ViewHolder holder, int position) {
Site item = mItems.get(position);
holder.itemView.setSelected(item.isHome());
holder.binding.name.setText(item.getName());
}
}

@ -14,13 +14,13 @@ import com.fongmi.bear.utils.Utils;
import java.util.ArrayList;
import java.util.List;
public class VodAdapter extends RecyclerView.Adapter<VodAdapter.VodHolder> {
public class VodAdapter extends RecyclerView.Adapter<VodAdapter.ViewHolder> {
private OnItemClickListener listener;
private List<Vod> items;
private OnItemClickListener mListener;
private List<Vod> mItems;
public VodAdapter() {
items = new ArrayList<>();
mItems = new ArrayList<>();
}
public interface OnItemClickListener {
@ -28,14 +28,14 @@ public class VodAdapter extends RecyclerView.Adapter<VodAdapter.VodHolder> {
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
this.mListener = listener;
}
class VodHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private final AdapterVodBinding binding;
public VodHolder(@NonNull AdapterVodBinding binding) {
public ViewHolder(@NonNull AdapterVodBinding binding) {
super(binding.getRoot());
this.binding = binding;
itemView.setOnClickListener(this);
@ -43,30 +43,30 @@ public class VodAdapter extends RecyclerView.Adapter<VodAdapter.VodHolder> {
@Override
public void onClick(View view) {
listener.onItemClick(items.get(getLayoutPosition()));
mListener.onItemClick(mItems.get(getLayoutPosition()));
}
}
public void addAll(List<Vod> items) {
this.items.clear();
this.items.addAll(items);
mItems.clear();
mItems.addAll(items);
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return items.size();
return mItems.size();
}
@NonNull
@Override
public VodAdapter.VodHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new VodHolder(AdapterVodBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
public VodAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(AdapterVodBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
}
@Override
public void onBindViewHolder(@NonNull VodAdapter.VodHolder holder, int position) {
Vod item = items.get(position);
public void onBindViewHolder(@NonNull VodAdapter.ViewHolder holder, int position) {
Vod item = mItems.get(position);
holder.binding.name.setText(item.getVodName());
holder.binding.remark.setText(item.getVodRemarks());
holder.binding.remark.setVisibility(item.getRemarkVisible());

@ -34,6 +34,12 @@ public class Notify {
get().makeText(text);
}
public static void show(Context context, View view) {
AlertDialog dialog = new MaterialAlertDialogBuilder(context).setView(view).create();
dialog.getWindow().setDimAmount(0);
dialog.show();
}
public static void show(Context context, View view, DialogInterface.OnClickListener listener) {
AlertDialog dialog = new MaterialAlertDialogBuilder(context).setView(view).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, listener).create();
dialog.getWindow().setDimAmount(0);

@ -72,11 +72,10 @@ public class JarLoader {
}
public Spider getSpider(String key, String ext) {
String clsKey = key.replace("csp_", "");
if (spiders.containsKey(clsKey)) return spiders.get(clsKey);
if (classLoader == null) return new SpiderNull();
try {
Spider spider = (Spider) classLoader.loadClass("com.github.catvod.spider." + clsKey).newInstance();
String clsKey = key.replace("csp_", "");
if (classLoader == null) return new SpiderNull();
Spider spider = spiders.containsKey(clsKey) ? spiders.get(clsKey) : (Spider) classLoader.loadClass("com.github.catvod.spider." + clsKey).newInstance();
spider.init(App.get(), ext);
spiders.put(clsKey, spider);
return spider;

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_item_selected" android:state_selected="true" />
<item android:drawable="@drawable/shape_item_selected" android:state_focused="true" />
<item android:drawable="@drawable/shape_item_focused" android:state_selected="true" />
<item android:drawable="@drawable/shape_item_focused" android:state_focused="true" />
<item android:drawable="@drawable/shape_item_normal" />
</selector>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_site_selected" android:state_selected="true" />
<item android:drawable="@drawable/shape_site_focused" android:state_focused="true" />
<item android:drawable="@drawable/shape_site_normal" />
</selector>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_vod_selected" android:state_selected="true" />
<item android:drawable="@drawable/shape_vod_selected" android:state_focused="true" />
<item android:drawable="@drawable/shape_vod_focused" android:state_selected="true" />
<item android:drawable="@drawable/shape_vod_focused" android:state_focused="true" />
<item android:drawable="@drawable/shape_vod_normal" />
</selector>

@ -2,7 +2,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/black_25" />
<solid android:color="@color/black_30" />
<corners android:radius="4dp" />

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/black_60" />
<corners android:radius="4dp" />
<padding
android:bottom="8dp"
android:left="12dp"
android:right="12dp"
android:top="8dp" />
</shape>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/black_50" />
<corners android:radius="4dp" />
<padding
android:bottom="8dp"
android:left="12dp"
android:right="12dp"
android:top="8dp" />
</shape>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/blue_500" />
<corners android:radius="4dp" />
<padding
android:bottom="8dp"
android:left="12dp"
android:right="12dp"
android:top="8dp" />
</shape>

@ -7,15 +7,42 @@
android:padding="16dp">
<LinearLayout
android:id="@+id/site"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/setting_site"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="18sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/config"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginEnd="12dp"
android:layout_weight="1"
android:background="@drawable/selector_item"
android:focusable="true"

@ -39,7 +39,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="8dp"
android:layout_marginTop="12dp"
android:alpha="0"
android:text="@string/splash_info"
android:textColor="@color/white"

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:layout_marginBottom="6dp"
android:background="@drawable/selector_site"
android:focusable="true"
android:focusableInTouchMode="true">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="泥巴影院" />
</LinearLayout>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/site"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

@ -16,8 +16,9 @@
<string name="home_update">更新推荐</string>
<!-- Setting -->
<string name="setting_url">配置接口</string>
<string name="setting_history">历史配置</string>
<string name="setting_site">首页</string>
<string name="setting_url">配置</string>
<string name="setting_history">历史纪录</string>
<!-- Dialog -->
<string name="dialog_positive">确定</string>

@ -16,8 +16,9 @@
<string name="home_update">更新推薦</string>
<!-- Setting -->
<string name="setting_url">配置接口</string>
<string name="setting_history">歷史配置</string>
<string name="setting_site">首頁</string>
<string name="setting_url">配置</string>
<string name="setting_history">歷史紀錄</string>
<!-- Dialog -->
<string name="dialog_positive">確定</string>

@ -12,8 +12,11 @@
<color name="green_400">#66BB6A</color>
<color name="transparent">#00000000</color>
<color name="black_20">#33000000</color>
<color name="black_25">#40000000</color>
<color name="black_30">#4D000000</color>
<color name="black_40">#66000000</color>
<color name="black_50">#80000000</color>
<color name="black_60">#99000000</color>
<color name="black_70">#B3000000</color>
<color name="black_80">#CC000000</color>
</resources>

@ -16,6 +16,7 @@
<string name="home_update">Recommend</string>
<!-- Setting -->
<string name="setting_site">Home site</string>
<string name="setting_url">Configure</string>
<string name="setting_history">History</string>

Loading…
Cancel
Save