Skip to content

Commit

Permalink
like/unlike, refactor constants
Browse files Browse the repository at this point in the history
  • Loading branch information
springhack committed Oct 7, 2021
1 parent 1623cc2 commit 15a162e
Show file tree
Hide file tree
Showing 10 changed files with 203 additions and 51 deletions.
6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ android {

dependencies {

implementation 'com.google.code.gson:gson:2.8.8'
implementation 'com.squareup.picasso:picasso:2.8'
implementation 'com.google.android:flexbox:1.0.0'
implementation 'org.jsoup:jsoup:1.14.3'
Expand Down
30 changes: 29 additions & 1 deletion app/src/main/java/org/springhack/stickercrap/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,38 @@
public class Constants {
public static String FILE_PROVIDER = BuildConfig.APPLICATION_ID + ".fileprovider";
public static String USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36";
public static String STICKER_LIST_URL = "https://sticker.weixin.qq.com/cgi-bin/mmemoticon-bin/emoticonview?oper=billboard&t=rank";
public static class Emojis {
public static String NO = "\uD83D\uDD05";
public static String LIKE = "\uD83D\uDC96";
public static String NORMAL = "\uD83D\uDCAD";
}
public static String[] ALLOW_PACKAGES = {
"com.fluidtouch.noteshelf2",
"com.samsung.android.app.notes",
"com.samsung.android.spdfnote"
};
public static class FetchConfig {
public static String STICKER_LIST_URL = "https://sticker.weixin.qq.com/cgi-bin/mmemoticon-bin/emoticonview?oper=billboard&t=rank";
public static String STICKER_LIST_SELECTOR = ".table_container .tbody tr .table_cell.detail";
public static class NameResolver {
public static String SELECTOR =".detail_content a.title";
public static String GETTER = "text";
}
public static class UrlResolver {
public static String SELECTOR =".detail_content a.title";
public static String GETTER = "href";
}
public static class AuthorResolver {
public static String SELECTOR =".detail_content .desc";
public static String GETTER = "text";
}
public static class ImageResolver {
public static String SELECTOR ="img";
public static String GETTER = "src";
}
public static class StickerResolver {
public static String SELECTOR =".stiker_content_ele";
public static String GETTER = "src";
}
}
}
26 changes: 18 additions & 8 deletions app/src/main/java/org/springhack/stickercrap/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,15 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import static org.springhack.stickercrap.Utils.AttrGetter;

public class MainActivity extends AppCompatActivity {

@Override
Expand All @@ -30,20 +33,27 @@ protected void onCreate(Bundle savedInstanceState) {
public void run() {
try {
List<Sticker> list = new ArrayList();
Set<String> likes = Utils.GetLikeStickers(getApplicationContext());
for (String like : likes) {
list.add(Utils.GetSticker(getApplicationContext(), like));
}
Document document =
Jsoup
.connect(Constants.STICKER_LIST_URL)
.connect(Constants.FetchConfig.STICKER_LIST_URL)
.userAgent(Constants.USER_AGENT)
.referrer(Constants.STICKER_LIST_URL)
.referrer(Constants.FetchConfig.STICKER_LIST_URL)
.get();
Elements elements = document.select(".table_container .tbody tr .table_cell.detail");
Elements elements = document.select(Constants.FetchConfig.STICKER_LIST_SELECTOR);
for (Element node : elements) {
Sticker sticker = new Sticker(
node.select(".detail_content a.title").first().text(),
node.select(".detail_content a.title").first().absUrl("href"),
node.select(".detail_content .desc").first().text(),
node.select("img").first().absUrl("src"));
list.add(sticker);
AttrGetter(node.select(Constants.FetchConfig.NameResolver.SELECTOR).first(),Constants.FetchConfig.NameResolver.GETTER),
AttrGetter(node.select(Constants.FetchConfig.UrlResolver.SELECTOR).first(),Constants.FetchConfig.UrlResolver.GETTER),
AttrGetter(node.select(Constants.FetchConfig.AuthorResolver.SELECTOR).first(),Constants.FetchConfig.AuthorResolver.GETTER),
AttrGetter(node.select(Constants.FetchConfig.ImageResolver.SELECTOR).first(),Constants.FetchConfig.ImageResolver.GETTER));
String key = Utils.GetIDFromURL(sticker.url);
if (!likes.contains(key)) {
list.add(sticker);
}
}
runOnUiThread(new Runnable() {
@Override
Expand Down
13 changes: 13 additions & 0 deletions app/src/main/java/org/springhack/stickercrap/Sticker.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
package org.springhack.stickercrap;

import com.google.gson.Gson;

public class Sticker {

public static Gson gson = new Gson();

public String name;
public String url;
public String author;
public String image;
public Boolean like = false;

public static Sticker fromJSON(String json) {
return gson.fromJson(json, Sticker.class);
}

public static String toJSON(Sticker sticker) {
return gson.toJson(sticker, Sticker.class);
}

public Sticker(String n, String u, String a, String i) {
this.name = n;
Expand Down
18 changes: 17 additions & 1 deletion app/src/main/java/org/springhack/stickercrap/StickerAdapter.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package org.springhack.stickercrap;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;

Expand All @@ -25,17 +28,30 @@ public StickerAdapter(Context context, int textViewResourceId,
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Sticker sticker = getItem(position);
int like_count = Utils.GetLikeStickers(getContext()).size();
int real_position = position - like_count + 1;

View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
TextView index = (TextView) view.findViewById(R.id.sticker_index);
TextView name = (TextView) view.findViewById(R.id.sticker_name);
TextView author = (TextView) view.findViewById(R.id.sticker_author);
ImageView image = (ImageView) view.findViewById(R.id.sticker_image);
Button like = (Button) view.findViewById(R.id.sticker_like);

index.setText(Integer.toString(position + 1));
name.setText(sticker.name);
author.setText(sticker.author);
index.setText(real_position > 0 ? Integer.toString(real_position) : Constants.Emojis.NO);
like.setText(sticker.like ? Constants.Emojis.LIKE : Constants.Emojis.NORMAL);
Picasso.get().load(sticker.image).into(image);
like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sticker.like = !sticker.like;
Utils.ChangeStickerStatus(getContext(), sticker);
Toast.makeText(getContext(), (sticker.like ? "Like " : "Unlike ") + sticker.name, 1000).show();
like.setText(sticker.like ? Constants.Emojis.LIKE : Constants.Emojis.NORMAL);
}
});
return view;
}

Expand Down
47 changes: 10 additions & 37 deletions app/src/main/java/org/springhack/stickercrap/StickerViewer.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,23 @@
package org.springhack.stickercrap;

import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.Image;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.os.FileUtils;
import android.util.Log;
import android.view.DragEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintHelper;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.FileProvider;

import com.google.android.flexbox.AlignItems;
import com.google.android.flexbox.AlignSelf;
import com.google.android.flexbox.FlexboxLayout;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
Expand All @@ -41,16 +35,20 @@
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static org.springhack.stickercrap.Utils.AttrGetter;
import static org.springhack.stickercrap.Utils.md5;

public class StickerViewer extends AppCompatActivity {

private File shared_files = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sticker_viewer);

final int DPS = getResources().getDimensionPixelSize(R.dimen.dps);
File shared_files = new File(getCacheDir(), "shared_files");
shared_files = new File(getCacheDir(), "shared_files");
shared_files.mkdirs();

ConstraintLayout layout = (ConstraintLayout)findViewById(R.id.viewer);
Expand Down Expand Up @@ -84,12 +82,12 @@ public void run() {
Document document = Jsoup
.connect(url)
.userAgent(Constants.USER_AGENT)
.referrer(Constants.STICKER_LIST_URL)
.referrer(Constants.FetchConfig.STICKER_LIST_URL)
.get();
Elements elements = document.select(".stiker_content_ele");
Elements elements = document.select(Constants.FetchConfig.StickerResolver.SELECTOR);
List<String> stickers = new ArrayList<String>();
for (Element node : elements) {
stickers.add(node.absUrl("src"));
stickers.add(AttrGetter(node, Constants.FetchConfig.StickerResolver.GETTER));
}
runOnUiThread(new Runnable() {
@Override
Expand Down Expand Up @@ -143,29 +141,4 @@ public void onPrepareLoad(Drawable placeHolderDrawable) {
}
}).start();
}

public static String md5(final String s) {
final String MD5 = "MD5";
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest
.getInstance(MD5);
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();

// Create Hex String
StringBuilder hexString = new StringBuilder();
for (byte aMessageDigest : messageDigest) {
String h = Integer.toHexString(0xFF & aMessageDigest);
while (h.length() < 2)
h = "0" + h;
hexString.append(h);
}
return hexString.toString();

} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}
85 changes: 85 additions & 0 deletions app/src/main/java/org/springhack/stickercrap/Utils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package org.springhack.stickercrap;

import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.util.ArraySet;

import org.jsoup.nodes.Element;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Set;

public class Utils {
public static String LIKE_STICKERS_KEY = "LIKE_STICKERS_KEY";

public static String AttrGetter(Element node, String getter) {
if (getter == "text") {
return node.text();
} else {
return node.absUrl(getter);
}
}

public static String GetIDFromURL(String url) {
Uri uri = Uri.parse(url);
return uri.getQueryParameter("productid");
}

public static Set<String> GetLikeStickers(Context context) {
SharedPreferences prefs = context.getSharedPreferences("sticker_like", Context.MODE_PRIVATE);
return prefs.getStringSet(LIKE_STICKERS_KEY, new ArraySet<>());
}

public static Sticker GetSticker(Context context, String key) {
SharedPreferences prefs = context.getSharedPreferences("sticker_like", Context.MODE_PRIVATE);
String json = prefs.getString(key, Sticker.toJSON(new Sticker("", "", "", "")));
return Sticker.fromJSON(json);
}

public static void ChangeStickerStatus(Context context, Sticker sticker) {
ChangeStickerStatus(context, sticker, sticker.like);
}

public static void ChangeStickerStatus(Context context, Sticker sticker, Boolean like) {
Set<String> likes = GetLikeStickers(context);
String key = GetIDFromURL(sticker.url);
SharedPreferences.Editor editor = context.getSharedPreferences("sticker_like", Context.MODE_PRIVATE).edit();
if (like) {
editor.putString(key, Sticker.toJSON(sticker));
likes.add(key);
} else {
editor.remove(key);
likes.remove(key);
}
editor.putStringSet(LIKE_STICKERS_KEY, likes);
editor.apply();
}

public static String md5(final String s) {
final String MD5 = "MD5";
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest
.getInstance(MD5);
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();

// Create Hex String
StringBuilder hexString = new StringBuilder();
for (byte aMessageDigest : messageDigest) {
String h = Integer.toHexString(0xFF & aMessageDigest);
while (h.length() < 2)
h = "0" + h;
hexString.append(h);
}
return hexString.toString();

} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}
Loading

0 comments on commit 15a162e

Please sign in to comment.