diff options
author | Trumeet <liangyuteng12345@gmail.com> | 2017-03-16 17:44:58 +0800 |
---|---|---|
committer | Trumeet <liangyuteng12345@gmail.com> | 2017-03-16 17:44:58 +0800 |
commit | b8ff5cb8093d5ab5a3bacb48d38e982ac48523ba (patch) | |
tree | b5bbdcc41ce741ca23b6e6b108dea4da93fda2e6 | |
parent | fcc3d444c350c726da563773ca2450a24f1ff1c7 (diff) | |
download | MAT-BBS_Discuz_Android-b8ff5cb8093d5ab5a3bacb48d38e982ac48523ba.tar MAT-BBS_Discuz_Android-b8ff5cb8093d5ab5a3bacb48d38e982ac48523ba.tar.gz MAT-BBS_Discuz_Android-b8ff5cb8093d5ab5a3bacb48d38e982ac48523ba.tar.bz2 MAT-BBS_Discuz_Android-b8ff5cb8093d5ab5a3bacb48d38e982ac48523ba.zip |
-rw-r--r-- | .idea/misc.xml | 2 | ||||
-rw-r--r-- | app/src/main/AndroidManifest.xml | 3 | ||||
-rw-r--r-- | app/src/main/java/me/letitfly/mat/activities/MainActivity.java (renamed from app/src/main/java/me/letitfly/mat/MainActivity.java) | 3 | ||||
-rw-r--r-- | app/src/main/java/me/letitfly/mat/activities/ThreadViewActivity.java | 134 | ||||
-rw-r--r-- | app/src/main/java/me/letitfly/mat/api/APIInterface.java | 3 | ||||
-rw-r--r-- | app/src/main/java/me/letitfly/mat/api/APIManager.java | 7 | ||||
-rw-r--r-- | app/src/main/java/me/letitfly/mat/fragments/PostListFragment.java | 25 | ||||
-rw-r--r-- | app/src/main/java/me/letitfly/mat/model/ThreadView.java | 405 | ||||
-rw-r--r-- | app/src/main/java/me/letitfly/mat/utils/FormatUtils.java | 79 | ||||
-rw-r--r-- | app/src/main/res/drawable/ic_send_black_24dp.xml | 9 | ||||
-rw-r--r-- | app/src/main/res/layout/activity_thread_view.xml | 33 | ||||
-rw-r--r-- | app/src/main/res/values/colors.xml | 2 | ||||
-rw-r--r-- | app/src/main/res/values/strings.xml | 3 |
13 files changed, 693 insertions, 15 deletions
diff --git a/.idea/misc.xml b/.idea/misc.xml index 5d19981..fbb6828 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ <ConfirmationsSetting value="0" id="Add" /> <ConfirmationsSetting value="0" id="Remove" /> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6c71c06..2675125 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> - <activity android:name=".MainActivity" + <activity android:name=".activities.MainActivity" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -16,6 +16,7 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + <activity android:name=".activities.ThreadViewActivity" /> </application> </manifest>
\ No newline at end of file diff --git a/app/src/main/java/me/letitfly/mat/MainActivity.java b/app/src/main/java/me/letitfly/mat/activities/MainActivity.java index 4a7418c..35edd08 100644 --- a/app/src/main/java/me/letitfly/mat/MainActivity.java +++ b/app/src/main/java/me/letitfly/mat/activities/MainActivity.java @@ -1,4 +1,4 @@ -package me.letitfly.mat; +package me.letitfly.mat.activities; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; @@ -9,6 +9,7 @@ import android.widget.TextView; import com.flipboard.bottomsheet.BottomSheetLayout; +import me.letitfly.mat.R; import me.letitfly.mat.utils.ForumSwitchUtils; import me.letitfly.mat.utils.ProgressSubscriber; import rx.Subscriber; diff --git a/app/src/main/java/me/letitfly/mat/activities/ThreadViewActivity.java b/app/src/main/java/me/letitfly/mat/activities/ThreadViewActivity.java new file mode 100644 index 0000000..ca730c3 --- /dev/null +++ b/app/src/main/java/me/letitfly/mat/activities/ThreadViewActivity.java @@ -0,0 +1,134 @@ +package me.letitfly.mat.activities; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.widget.ImageView; + +import com.bumptech.glide.Glide; +import com.stfalcon.chatkit.commons.ImageLoader; +import com.stfalcon.chatkit.commons.models.IMessage; +import com.stfalcon.chatkit.commons.models.IUser; +import com.stfalcon.chatkit.messages.MessagesList; +import com.stfalcon.chatkit.messages.MessagesListAdapter; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; +import me.letitfly.mat.R; +import me.letitfly.mat.api.APIManager; +import me.letitfly.mat.model.ForumDisplay; +import me.letitfly.mat.model.ThreadView; +import me.letitfly.mat.utils.FormatUtils; +import me.letitfly.mat.utils.Logger; +import me.letitfly.mat.utils.ProgressSubscriber; + +/** + * Created by Trumeet on 2017/3/15. + * A activity to view thread replies. + * @author Trumeet + */ + +public class ThreadViewActivity extends AppCompatActivity { + private static final String TAG = ThreadViewActivity.class.getSimpleName(); + public static final String EXTRA_TID = ThreadViewActivity.class.getSimpleName() + + ".EXTRA_TID"; + @BindView(R.id.messagesList) + MessagesList mMessagesList; + private MessagesListAdapter<IMessage> mAdapter; + private int mTid; + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Intent intent = getIntent(); + try { + mTid = Integer.parseInt(intent.getStringExtra(EXTRA_TID)); + } catch (Exception e) { + finish(); + return; + } + setContentView(R.layout.activity_thread_view); + ButterKnife.bind(this); + mAdapter = new MessagesListAdapter<>("0", new ImageLoader() { + @Override + public void loadImage(ImageView imageView, String url) { + Glide.with(ThreadViewActivity.this) + .load(url) + .placeholder(R.mipmap.ic_launcher) + .into(imageView); + } + }); + + loadThread(0); + } + + private void loadThread (int page) { + ProgressSubscriber<ThreadView> subscriber = new ProgressSubscriber<>( + new ProgressSubscriber.SubscriberOnNextListener<ThreadView>() { + @Override + public void onNext(ThreadView threadView) { + convertThreadViewToIMessage(threadView); + } + + @Override + public void onError(Throwable e) { + // TODO: Show error + } + } + ); + APIManager.getThreadView(mTid, page, subscriber); + } + + private void convertThreadViewToIMessage (ThreadView threadView) { + ArrayList<IMessage> list = new ArrayList<>(); + for (final ThreadView.Post post : threadView.getPostlist()) { + list.add(new IMessage() { + @Override + public String getId() { + return post.getPid(); + } + + @Override + public String getText() { + return post.getMessage(); + } + + @Override + public IUser getUser() { + return new IUser() { + @Override + public String getId() { + return post.getAuthorid(); + } + + @Override + public String getName() { + return post.getAuthor(); + } + + @Override + public String getAvatar() { + return null; + } + }; + } + + @Override + public Date getCreatedAt() { + return FormatUtils.convertDateLine(post.getDateline()); + } + }); + } + mAdapter.addToEnd(list, true); + mMessagesList.setAdapter(mAdapter); + setTitle(threadView.getThread().getSubject()); + } +} diff --git a/app/src/main/java/me/letitfly/mat/api/APIInterface.java b/app/src/main/java/me/letitfly/mat/api/APIInterface.java index 0bf8275..2ea4a23 100644 --- a/app/src/main/java/me/letitfly/mat/api/APIInterface.java +++ b/app/src/main/java/me/letitfly/mat/api/APIInterface.java @@ -3,6 +3,7 @@ package me.letitfly.mat.api; import me.letitfly.mat.api.model.HttpResult; import me.letitfly.mat.model.ForumDisplay; import me.letitfly.mat.model.ForumNav; +import me.letitfly.mat.model.ThreadView; import retrofit2.http.GET; import retrofit2.http.Query; import rx.Observable; @@ -18,4 +19,6 @@ interface APIInterface { Observable<HttpResult<ForumNav>> nav (@Query("page") int page); @GET("mobile/index.php?version=4&module=forumdisplay") Observable<HttpResult<ForumDisplay>> display (@Query("fid") int fid, @Query("page") int page); + @GET("mobile/index.php?version=4&module=viewthread") + Observable<HttpResult<ThreadView>> threadView (@Query("tid") int tid, @Query("page") int page); } diff --git a/app/src/main/java/me/letitfly/mat/api/APIManager.java b/app/src/main/java/me/letitfly/mat/api/APIManager.java index 8ef51e8..6ef44f0 100644 --- a/app/src/main/java/me/letitfly/mat/api/APIManager.java +++ b/app/src/main/java/me/letitfly/mat/api/APIManager.java @@ -5,6 +5,7 @@ import me.letitfly.mat.api.exception.ApiException; import me.letitfly.mat.api.model.HttpResult; import me.letitfly.mat.model.ForumDisplay; import me.letitfly.mat.model.ForumNav; +import me.letitfly.mat.model.ThreadView; import me.letitfly.mat.utils.Logger; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; @@ -59,6 +60,12 @@ public class APIManager { .map(new HttpResultFunc<ForumNav>()), subscriber); } + public static void getThreadView (int tid, int page, Subscriber<ThreadView> subscriber) { + Logger.i(TAG, "-> getThreadView"); + toSubscribe(getInterface().threadView(tid, page) + .map(new HttpResultFunc<ThreadView>()), subscriber); + } + //添加线程管理并订阅 @SuppressWarnings("unchecked") private static void toSubscribe(Observable o, Subscriber s){ diff --git a/app/src/main/java/me/letitfly/mat/fragments/PostListFragment.java b/app/src/main/java/me/letitfly/mat/fragments/PostListFragment.java index dc546ee..f9a94c1 100644 --- a/app/src/main/java/me/letitfly/mat/fragments/PostListFragment.java +++ b/app/src/main/java/me/letitfly/mat/fragments/PostListFragment.java @@ -2,15 +2,18 @@ package me.letitfly.mat.fragments; import android.app.Fragment; import android.app.ListFragment; +import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; import java.util.Arrays; import java.util.List; +import me.letitfly.mat.activities.ThreadViewActivity; import me.letitfly.mat.api.APIManager; import me.letitfly.mat.model.ForumDisplay; import me.letitfly.mat.model.ForumNav; @@ -49,7 +52,7 @@ public class PostListFragment extends ListFragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - refresh(null); + refresh(); } @Override @@ -67,12 +70,7 @@ public class PostListFragment extends ListFragment { return fragment; } - public interface RefreshListener { - void finish(); - void err(); - } - - public synchronized void refresh (@Nullable final RefreshListener refreshListener) { + public synchronized void refresh () { Logger.i(TAG, "-> refresh:" + mForum); if (mGetListSubscriber != null) mGetListSubscriber.unsubscribe(); @@ -81,20 +79,23 @@ public class PostListFragment extends ListFragment { ProgressSubscriber.SubscriberOnNextListener<ForumDisplay> listener = new ProgressSubscriber.SubscriberOnNextListener<ForumDisplay>() { @Override - public void onNext(ForumDisplay display) { + public void onNext(final ForumDisplay display) { ForumDisplay.Thread[] threads = display.getForum_threadlist(); mThreadList = Arrays.asList(threads); mAdapter = new ThreadListAdapter(getActivity(), mThreadList); getListView().setAdapter(mAdapter); - if (refreshListener != null) - refreshListener.finish(); + getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { + startActivity(new Intent(getActivity(), ThreadViewActivity.class) + .putExtra(ThreadViewActivity.EXTRA_TID, mThreadList.get(i).getTid())); + } + }); } @Override public void onError(Throwable e) { // TODO: Show error - if (refreshListener != null) - refreshListener.err(); } }; mGetListSubscriber = new ProgressSubscriber<>(listener); diff --git a/app/src/main/java/me/letitfly/mat/model/ThreadView.java b/app/src/main/java/me/letitfly/mat/model/ThreadView.java new file mode 100644 index 0000000..078639b --- /dev/null +++ b/app/src/main/java/me/letitfly/mat/model/ThreadView.java @@ -0,0 +1,405 @@ +package me.letitfly.mat.model; + +/** + * Created by Trumeet on 2017/3/15. + * A thread + * @author Trumeet + */ + +public class ThreadView { + private Thread thread; + private String fid; + private Post[] postlist; + + public Thread getThread() { + return thread; + } + + public String getFid() { + return fid; + } + + public Post[] getPostlist() { + return postlist; + } + + public static class Thread { + private String tid; + private String fid; + private String posttableid; + private String typeid; + private String sortid; + private String readperm; + private String price; + private String author; + private String authorid; + private String subject; + private String dateline; + private String lastpost; + private String lastposter; + private String views; + private String replies; + private String displayorder; + private String highlight; + private String digest; + private String rate; + private String special; + private String attachment; + private String moderated; + private String closed; + private String stickreply; + private String recommends; + private String recommend_add; + private String recommend_sub; + private String heats; + private String status; + private String isgroup; + private String favtimes; + private String sharetimes; + private String stamp; + private String icon; + private String pushedaid; + private String cover; + private String replycredit; + private String relatebytag; + private String maxposition; + private String bgcolor; + private String comments; + private String hidden; + private String threadtable; + private String threadtableid; + private String posttable; + private String addviews; + private String allreplies; + private String is_archived; + private String archiveid; + private String subjectenc; + private String short_subject; + private String recommendlevel; + private String heatlevel; + private String relay; + private String ordertype; + private String recommend; + + public String getTid() { + return tid; + } + + public String getFid() { + return fid; + } + + public String getPosttableid() { + return posttableid; + } + + public String getTypeid() { + return typeid; + } + + public String getSortid() { + return sortid; + } + + public String getReadperm() { + return readperm; + } + + public String getPrice() { + return price; + } + + public String getAuthor() { + return author; + } + + public String getAuthorid() { + return authorid; + } + + public String getSubject() { + return subject; + } + + public String getDateline() { + return dateline; + } + + public String getLastpost() { + return lastpost; + } + + public String getLastposter() { + return lastposter; + } + + public String getViews() { + return views; + } + + public String getReplies() { + return replies; + } + + public String getDisplayorder() { + return displayorder; + } + + public String getHighlight() { + return highlight; + } + + public String getDigest() { + return digest; + } + + public String getRate() { + return rate; + } + + public String getSpecial() { + return special; + } + + public String getAttachment() { + return attachment; + } + + public String getModerated() { + return moderated; + } + + public String getClosed() { + return closed; + } + + public String getStickreply() { + return stickreply; + } + + public String getRecommends() { + return recommends; + } + + public String getRecommend_add() { + return recommend_add; + } + + public String getRecommend_sub() { + return recommend_sub; + } + + public String getHeats() { + return heats; + } + + public String getStatus() { + return status; + } + + public String getIsgroup() { + return isgroup; + } + + public String getFavtimes() { + return favtimes; + } + + public String getSharetimes() { + return sharetimes; + } + + public String getStamp() { + return stamp; + } + + public String getIcon() { + return icon; + } + + public String getPushedaid() { + return pushedaid; + } + + public String getCover() { + return cover; + } + + public String getReplycredit() { + return replycredit; + } + + public String getRelatebytag() { + return relatebytag; + } + + public String getMaxposition() { + return maxposition; + } + + public String getBgcolor() { + return bgcolor; + } + + public String getComments() { + return comments; + } + + public String getHidden() { + return hidden; + } + + public String getThreadtable() { + return threadtable; + } + + public String getThreadtableid() { + return threadtableid; + } + + public String getPosttable() { + return posttable; + } + + public String getAddviews() { + return addviews; + } + + public String getAllreplies() { + return allreplies; + } + + public String getIs_archived() { + return is_archived; + } + + public String getArchiveid() { + return archiveid; + } + + public String getSubjectenc() { + return subjectenc; + } + + public String getShort_subject() { + return short_subject; + } + + public String getRecommendlevel() { + return recommendlevel; + } + + public String getHeatlevel() { + return heatlevel; + } + + public String getRelay() { + return relay; + } + + public String getOrdertype() { + return ordertype; + } + + public String getRecommend() { + return recommend; + } + } + public static class Post { + private String pid; + private String tid; + private String first; + private String author; + private String authorid; + private String dateline; + private String message; + private String anonymous; + private String attachment; + private String status; + private String replycredit; + private String position; + private String username; + private String adminid; + private String groupid; + private String memberstatus; + private String number; + private String dbdateline; + private String groupiconid; + + public String getPid() { + return pid; + } + + public String getTid() { + return tid; + } + + public String getFirst() { + return first; + } + + public String getAuthor() { + return author; + } + + public String getAuthorid() { + return authorid; + } + + public String getDateline() { + return dateline; + } + + public String getMessage() { + return message; + } + + public String getAnonymous() { + return anonymous; + } + + public String getAttachment() { + return attachment; + } + + public String getStatus() { + return status; + } + + public String getReplycredit() { + return replycredit; + } + + public String getPosition() { + return position; + } + + public String getUsername() { + return username; + } + + public String getAdminid() { + return adminid; + } + + public String getGroupid() { + return groupid; + } + + public String getMemberstatus() { + return memberstatus; + } + + public String getNumber() { + return number; + } + + public String getDbdateline() { + return dbdateline; + } + + public String getGroupiconid() { + return groupiconid; + } + } +} diff --git a/app/src/main/java/me/letitfly/mat/utils/FormatUtils.java b/app/src/main/java/me/letitfly/mat/utils/FormatUtils.java new file mode 100644 index 0000000..b046c7f --- /dev/null +++ b/app/src/main/java/me/letitfly/mat/utils/FormatUtils.java @@ -0,0 +1,79 @@ +package me.letitfly.mat.utils; + +import android.annotation.SuppressLint; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by Trumeet on 2017/3/16. + * @author Trumeet + */ + +public class FormatUtils { + private static final String TAG = "FormatUtil"; + + @SuppressLint("SimpleDateFormat") + public static Date convertDateLine (String dateLine) { + // TODO: Finish it. + try { + Logger.i(TAG, "formatDate"); + return new SimpleDateFormat("yyyy-MM-dd k:m:s") + .parse(dateLine); + } catch (ParseException e) { + Logger.i(TAG, "try match 7 天前"); + // 7 天前 + Matcher matcher = Pattern.compile("\\d+ 天前").matcher(dateLine); + if (matcher.matches()) { + Logger.i(TAG, "7 天前 matches"); + if (matcher.find()) { + Logger.i(TAG, "7 天前 find"); + int days = Integer.parseInt(dateLine.substring(matcher.start() + , matcher.end())); + return getDateBefore(new Date(), days); + } + } else { + Logger.i(TAG, "try match 昨天 23:01"); + // 昨天 23:01 + Matcher m1 = Pattern.compile("昨天 \\d+:\\d+").matcher(dateLine); + if (m1.matches()) { + Logger.i(TAG, "昨天 23:01 matches"); + int hour = -1; + int time = -1; + while (m1.find()) { + if (hour == -1) { + hour = Integer.parseInt(dateLine.substring(m1.start() + , m1.end())); + } else if (time == -1) { + time = Integer.parseInt(dateLine.substring(m1.start() + , m1.end())); + } else break; + } + Logger.i(TAG, "昨天 23:01 hour:" + hour + "time:" + time); + Date date = new Date(); + date.setHours(hour); + date.setTime(time); + return getDateBefore(date, date.getDay() - 1); + } + } + Logger.e(TAG, "Fail to parse date!", e); + return new Date(); + } + } + /** + * 得到几天前的时间 + * @param d + * @param day + * @return + */ + private static Date getDateBefore(Date d,int day){ + Calendar now =Calendar.getInstance(); + now.setTime(d); + now.set(Calendar.DATE,now.get(Calendar.DATE)-day); + return now.getTime(); + } +} diff --git a/app/src/main/res/drawable/ic_send_black_24dp.xml b/app/src/main/res/drawable/ic_send_black_24dp.xml new file mode 100644 index 0000000..e145ca8 --- /dev/null +++ b/app/src/main/res/drawable/ic_send_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z"/> +</vector> diff --git a/app/src/main/res/layout/activity_thread_view.xml b/app/src/main/res/layout/activity_thread_view.xml new file mode 100644 index 0000000..8e2f990 --- /dev/null +++ b/app/src/main/res/layout/activity_thread_view.xml @@ -0,0 +1,33 @@ +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/white"> + + <com.stfalcon.chatkit.messages.MessagesList + android:id="@+id/messagesList" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_above="@+id/input" + app:incomingAvatarHeight="56dp" + app:incomingAvatarWidth="56dp" + app:outcomingTimeTextColor="@color/gray_dark_transparent"/> + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_above="@+id/input" + android:layout_marginLeft="16dp" + android:layout_marginRight="16dp" + android:background="@color/gray_light"/> + + <com.stfalcon.chatkit.messages.MessageInput + android:id="@+id/input" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + app:inputButtonIcon="@drawable/ic_send_black_24dp" + app:inputHint="@string/hint_enter_a_message"/> + +</RelativeLayout>
\ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 45e367d..bc6c165 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,4 +3,6 @@ <color name="colorPrimary">#FAFAFA</color> <color name="colorPrimaryDark">#F5F5F5</color> <color name="colorAccent">#FF4081</color> + <color name="gray_light">#e8e8e8</color> + <color name="gray_dark_transparent">#ae858585</color> </resources> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b9dabcb..ede8cf4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,4 +8,7 @@ <!-- For Forum Switcher --> <string name="title_forums">Forums</string> <string name="filter_all">All</string> + + <!-- Hint in reply thread --> + <string name="hint_enter_a_message"></string> </resources> |