Skip to content

Commit

Permalink
NooTous: trends counts
Browse files Browse the repository at this point in the history
  • Loading branch information
MKergall committed Aug 20, 2021
1 parent 3c06507 commit 71c96d8
Show file tree
Hide file tree
Showing 5 changed files with 187 additions and 54 deletions.
117 changes: 96 additions & 21 deletions NooTous/src/main/java/com/nootous/GroupName.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.nootous;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
Expand All @@ -8,13 +9,16 @@
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;
import com.nootous.databinding.GroupNameBinding;

import java.util.ArrayList;
import java.util.List;

public class GroupName extends Fragment {

Expand All @@ -27,19 +31,17 @@ public class GroupName extends Fragment {
Bundle savedInstanceState) {
mActivity = (MainActivity)getActivity();
mBinding = GroupNameBinding.inflate(inflater, container, false);
return mBinding.getRoot();
}

public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

String groupName = mActivity.getSharedPreferences("NOOTOUS", mActivity.MODE_PRIVATE).getString("GROUP_NAME", "#");
mBinding.groupName.setText(groupName);
mBinding.groupName.setThreshold(1);

TrendAdapter adapter = new TrendAdapter(
getContext(), R.layout.group_name, R.id.lbl_name, mActivity.mTrends);
mBinding.groupName.setAdapter(adapter);

mBinding.trends.setOnClickListener(new OnClickListener() {
@Override public void onClick(View view) {
if (mActivity.mTrends != null && mActivity.mTrends.length > 0)
if (mActivity.mTrends.size() > 0)
mBinding.groupName.showDropDown();
}
});
Expand All @@ -56,10 +58,19 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
}
});

if (mActivity.mTrends == null) {
if (mActivity.mTrends.size()==0) {
mBinding.trends.setVisibility(View.INVISIBLE);
//load only if not already loaded - test is not perfect...
mGetTrendTask = new GetTrendTask();
mGetTrendTask.execute();
}
} else
mBinding.trends.setVisibility(View.VISIBLE);

return mBinding.getRoot();
}

public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}

@Override public void onDestroyView() {
Expand All @@ -69,26 +80,90 @@ public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
mActivity = null;
}

//------------- Trends
/*
public class Trend {
public String name;
public int count;
//------------- TrendAdapter

public class TrendAdapter extends ArrayAdapter<Trend> {
Context context;
int resource, textViewResourceId;
List<Trend> items, tempItems, suggestions;

public TrendAdapter(Context context, int resource, int textViewResourceId, List<Trend> items) {
super(context, resource, textViewResourceId, items);
this.context = context;
this.items = items;
this.resource = resource;
this.textViewResourceId = textViewResourceId;
tempItems = new ArrayList<Trend>(items);
suggestions = new ArrayList<Trend>();
}

@Override public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.trend_row, parent, false);
}
Trend trend = items.get(position);
if (trend != null) {
TextView lblName = (TextView) view.findViewById(R.id.lbl_name);
lblName.setText(trend.name);
TextView lblCount = (TextView) view.findViewById(R.id.lbl_count);
lblCount.setText(trend.displayedCount());
}
return view;
}

@Override public Filter getFilter() {
return nameFilter;
}

Filter nameFilter = new Filter() {
@Override public CharSequence convertResultToString(Object resultValue) {
String str = ((Trend) resultValue).name;
return str;
}

@Override protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestions.clear();
for (Trend trend : tempItems) {
if (trend.name.contains(constraint.toString())) {
suggestions.add(trend);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}

@Override protected void publishResults(CharSequence constraint, FilterResults results) {
List<Trend> filterList = (ArrayList<Trend>) results.values;
if (results != null && results.count > 0) {
clear();
for (Trend trend : filterList) {
add(trend);
notifyDataSetChanged();
}
}
}
};
}
*/

//---------------

private class GetTrendTask extends AsyncTask<String, Void, String> {
@Override protected String doInBackground(String... params) {
return mActivity.getTrends();
return Trend.getTrends(mActivity.mTrends);
}

@Override protected void onPostExecute(String error) {
if (error == null) {
if (mActivity.mTrends.length > 0) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(mActivity, android.R.layout.simple_list_item_1, mActivity.mTrends);
mBinding.groupName.setAdapter(adapter);
}
//ready to use:
mBinding.trends.setVisibility(View.VISIBLE);
} else {
Toast.makeText(mActivity.getApplicationContext(), error, Toast.LENGTH_SHORT).show();
}
Expand Down
36 changes: 3 additions & 33 deletions NooTous/src/main/java/com/nootous/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,31 @@
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
import com.nootous.databinding.ActivityGroupBinding;

import org.osmdroid.bonuspack.sharing.Friends;
import org.osmdroid.bonuspack.sharing.Partner;
import org.osmdroid.bonuspack.utils.BonusPackHelper;
import org.osmdroid.util.GeoPoint;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private AppBarConfiguration appBarConfiguration;
private ActivityGroupBinding mBinding;

//data common to all fragments:
public String[] mTrends;
public List<Trend> mTrends = new ArrayList<>(0);
public Partner mPartner;

public GeoPoint mCurrentLocation = null;
Expand Down Expand Up @@ -76,32 +74,4 @@ public String getUniqueId() {
return Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
}

String getTrends() {
String url = Friends.NAV_SERVER_URL + "jtrends.php";
String result = BonusPackHelper.requestStringFromUrl(url);
if (result == null) {
return "Technical error with the server";
}
Log.d(BonusPackHelper.LOG_TAG, "getTrends:" + url);
try {
JsonElement json = JsonParser.parseString(result);
JsonObject jResult = json.getAsJsonObject();
String answer = jResult.get("answer").getAsString();
if (!"ok".equals(answer)) {
return jResult.get("error").getAsString();
}
JsonArray jTrends = jResult.get("trends").getAsJsonArray();
mTrends = new String[jTrends.size()];
int i = 0;
for (JsonElement jPartner:jTrends){
JsonObject jPO = jPartner.getAsJsonObject();
String trend = jPO.get("group_id").getAsString();
mTrends[i] = trend;
i++;
}
} catch (JsonSyntaxException e) {
return "Technical error with the server";
}
return null;
}
}
59 changes: 59 additions & 0 deletions NooTous/src/main/java/com/nootous/Trend.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.nootous;

import android.util.Log;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
import org.osmdroid.bonuspack.sharing.Friends;
import org.osmdroid.bonuspack.utils.BonusPackHelper;
import java.util.List;

public class Trend {
public String name;
public int count;
public Trend(JsonObject jPO) {
name = jPO.get("group_id").getAsString();
count = jPO.get("group_count").getAsInt();
}
public String displayedCount(){
if (count < 10)
return String.valueOf(count);
else if (count < 100)
return ">10";
else if (count < 1000)
return ">100";
else if (count < 100000)
return String.valueOf(count/1000)+"K";
else
return String.valueOf(count/1000000)+"M";
}

public static String getTrends(List<Trend> trends) {
String url = Friends.NAV_SERVER_URL + "jtrends.php";
String result = BonusPackHelper.requestStringFromUrl(url);
if (result == null) {
return "Technical error with the server";
}
Log.d(BonusPackHelper.LOG_TAG, "getTrends:" + url);
try {
JsonElement json = JsonParser.parseString(result);
JsonObject jResult = json.getAsJsonObject();
String answer = jResult.get("answer").getAsString();
if (!"ok".equals(answer)) {
return jResult.get("error").getAsString();
}
JsonArray jTrends = jResult.get("trends").getAsJsonArray();
trends.clear();
for (JsonElement jPartner:jTrends){
JsonObject jPO = jPartner.getAsJsonObject();
Trend trend = new Trend(jPO);
trends.add(trend);
}
} catch (JsonSyntaxException e) {
return "Technical error with the server";
}
return null;
}
}
1 change: 1 addition & 0 deletions NooTous/src/main/res/layout/group_name.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
android:hint="@string/group_name"
android:imeOptions="actionDone"
android:singleLine="true"
android:completionThreshold="1"
app:layout_constraintBottom_toTopOf="@id/button_next"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
Expand Down
28 changes: 28 additions & 0 deletions NooTous/src/main/res/layout/trend_row.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<TextView
android:id="@+id/lbl_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="16dp"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/lbl_count"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="16dp"
android:text="Count"
android:gravity="right"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>

0 comments on commit 71c96d8

Please sign in to comment.